Date Firebird日期关联更改日期格式

Date Firebird日期关联更改日期格式,date,firebird,concat,Date,Firebird,Concat,有几天我在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

有几天我在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
因此,当一个日期为空时,则整个concat为空,并且日期格式从“YYYY-MM-DD”更改为“DD-MM-YYYY”。结果应为:

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
s的concat字段,请使用函数,即

选择
数据wyst、数据sp、数据pop、,
聚结(data_wyst,)| | | | | | | | | | | | | | | | | | | |聚结(data_pop,)
来自rv_sp_dok
要在不使用任何外部函数的情况下控制日期格式(AFAIK,即
date2string
is),您可以使用该函数,即

EXTRACT(从数据中提取年份)| |“-”EXTRACT(从数据中提取月份)| |“-”EXTRACT(从数据中提取日期)

到可能具有
NULL
s use函数的concat字段,即

选择
数据wyst、数据sp、数据pop、,
聚结(data_wyst,)| | | | | | | | | | | | | | | | | | | |聚结(data_pop,)
来自rv_sp_dok
要在不使用任何外部函数的情况下控制日期格式(AFAIK,即
date2string
is),您可以使用该函数,即

EXTRACT(从数据中提取年份)| |“-”EXTRACT(从数据中提取月份)| |“-”EXTRACT(从数据中提取日期)

Well目前还没有找到更好的解决方案,所以只能通过提取或过程进行提取。还在想为什么firebird在发布日期时会改变这个:/@Jerry1333改变什么?uncast字段的日期格式由显示该日期的应用程序在客户端处理,cast字段在服务器端转换为字符串。如果其中一个字符串为null,则整个字符串变为null,这是因为SQL就是这样定义串联运算符的(
|
)。目前还没有找到更好的解决方案,所以提取或过程将执行提取。还在想为什么firebird在发布日期时会改变这个:/@Jerry1333改变什么?uncast字段的日期格式由显示该日期的应用程序在客户端处理,cast字段在服务器端转换为字符串。如果其中一个字符串为null,则整个字符串变为null,这是因为SQL就是这样定义串联运算符的(
| |
)。