mysql之DATE_FORMAT迁移到gbase8s
-- DATE_FORMAT(d,fmt)
-- fmt 有差异需转换,支持yyyy-mm-dd(与oracle小部分有差异)或则%Y-%m-%d(mysql小部分有差异)格式
drop function if exists DATE_FORMAT(datetime year to second, varchar);
create dba function DATE_FORMAT(d datetime year to second, fmt varchar(40))
returns varchar(40) with (not variant);
define tmpfmt varchar(40);
on exception
return null;
end exception;
if substr(fmt,1,1)='%'
then
let tmpfmt = replace(fmt,'f','F5');
let tmpfmt = replace(tmpfmt,'h','I');
let tmpfmt = replace(tmpfmt,'k','H');
let tmpfmt = replace(tmpfmt,'l','I');
let tmpfmt = replace(tmpfmt,'M','B');
let tmpfmt = replace(tmpfmt,'s','S');
let tmpfmt = replace(tmpfmt,'W','A');
let tmpfmt = replace(tmpfmt,'i','M');
return gbase_to_char(d,tmpfmt);
else
RETURN to_char(d,fmt);
end if;
end function;
测试语句
SELECT '%M %d, %Y___'||DATE_FORMAT(d,'%M %d, %Y')FROM ti UNION all
SELECT 'fmMonth DD,YYYY___'||DATE_FORMAT(d,'fmMonth DD,YYYY')FROM ti UNION all
SELECT '%W, %b %e, %Y %h:%i %p___'||DATE_FORMAT(d, '%W, %b %e, %Y %h:%i %p')FROM ti UNION ALL
SELECT 'fmDay, Mon DD, YYYY HH12:MI AM___'||DATE_FORMAT(d, 'fmDay, Mon DD, YYYY HH12:MI AM')FROM ti UNION ALL
SELECT '%Y-%m-%d___'||DATE_FORMAT(d, '%Y-%m-%d') FROM ti UNION ALL
SELECT 'yyyy-mm-dd___'||DATE_FORMAT(d, 'yyyy-mm-dd') FROM ti UNION all
SELECT '%D of %M, %Y___'||DATE_FORMAT(d, '%D of %M, %Y')FROM ti UNION ALL
SELECT 'DDth of fmMonth, YYYY___'||DATE_FORMAT(d, 'DDth fmMonth, YYYY ')FROM ti --似乎不存在DDth;
运行结果如下:
DDth只能改成DD了