Date Firebird日期关联更改日期格式
有几天我在Firebird查询中遇到了日期问题。我试图在select语句的一个字段中包含3个日期 建立此模型以进行测试: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
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就是这样定义串联运算符的(| |
)。