我有以下功能:
CREATE function SEMANA_ISO (fecha date) returns text as $$
select to_char(fecha, 'mm-dd-yyyy');
$$ LANGUAGE sql;
适用于:
Select SEMANA_ISO ('28/12/2014');
Select SEMANA_ISO ('01/01/2015');
Select SEMANA_ISO ('01/07/2015');
如下所示
但不是:
Select SEMANA_ISO ('12/31/2014');
它显示:
********** Error **********
ERROR: The value of time / date is out of range "12/31/2014"
SQL state: 22008
Hint: You may need a different configuration of "dateStyle".
Character: 20
您是否有任何建议而无需更改日期风格,以便我可以输入
Select SEMANA_ISO ('12/31/2014');
获得输出:
12-31-2014
只使用一个函数来解析"所有日期?
答案 0 :(得分:1)
声明您的函数获取类型date
的参数,因此您还需要传递这样的值。 '12/31/2014'
是字符值,而不是日期。
当你将一个字符文字(又名字符串)传递给函数时,Postgres被迫根据当前日期样式进行隐式数据类型转换 - 而不是你应该依赖的东西。
如果您想独立于日期风格调用该函数,则需要传递正确的日期文字,例如DATE '2014-12-31'
有关指定日期值的详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT
答案 1 :(得分:0)
如果您希望12/31/2014
被接受为日期set datestyle to iso, dmy;
如果您希望31/12/2014
被接受为日期set datestyle to iso, mdy;
你不能同时拥有两个,否则4/1/2015
是ambiguos,必须被拒绝。
答案 2 :(得分:0)