火鸟日期可疑更改日期格式

杰里1333

几天来,我在Firebird查询中遇到了日期问题。我正在尝试在select语句的一个字段中合并3个日期。

建立这个来测试它:

select 
data_wyst, data_sp, data_pop,
data_wyst ||' | '|| data_sp ||' | '|| data_pop
from rv_sp_dok

结果是:

2015-12-14; 2015-12-14; 2015-12-31; 14-DEC-2015 | 14-DEC-2015 | 31-DEC-2015
2015-12-31; 2015-12-31; null; null
2015-12-31; 2015-12-31; 2015-12-31; 31-DEC-2015 | 31-DEC-2015 | 31-DEC-2015

因此,当一个日期为null时,则整个concat为null,并且日期格式从'YYYY-MM-DD'更改为'DD-MM-YYYY'。结果concat应该是:

2015-12-14; 2015-12-14; 2015-12-31; 2015-12-14 | 2015-12-14 | 2015-12-31
2015-12-31; 2015-12-31; null; 2015-12-31 | 2015-12-31 |
2015-12-31; 2015-12-31; 2015-12-31; 2015-12-31 | 2015-12-31 | 2015-12-31

有什么方法可以防止Firebird在转换为字符串时更改日期格式(将date2string转换为过程除外)?

//编辑:似乎最好的方法是将日期转换为字符串的过程:

CREATE OR ALTER PROCEDURE DATE2STRING (DataIN Date)
    returns (DataOut Varchar(10))
    AS 
      declare variable y Varchar(4);
      declare variable m Varchar(2);
      declare variable d Varchar(2);
    begin
    IF (DataIn is null) then 
    BEGIN
        DataOut = '';
    END
    ELSE
    BEGIN
        y = Substring(Extract(Year FROM DataIn) FROM 1 FOR 4);
        m = Substring(Extract(Month FROM DataIn)+100 FROM 2 FOR 2);
        d = Substring(Extract(Day FROM DataIn)+100 FROM 2 FOR 2);

        DataOut = y || '-' || m || '-' || d;
    END
    SUSPEND;
    end
爱因

合并可能具有NULL字段,请使用合并功能,即

select 
data_wyst, data_sp, data_pop,
COALESCE(data_wyst, '') ||' | '|| COALESCE(data_sp, '') ||' | '|| COALESCE(data_pop, '')
from rv_sp_dok

要在不使用任何外部功能(即date2stringAFAIK)的情况下控制日期格式,可以使用提取功能,即

EXTRACT(YEAR FROM data_pop) ||'-'|| EXTRACT(MONTH FROM data_pop)||'-'|| EXTRACT(DAY FROM data_pop)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章