【发布时间】:2016-04-18 01:51:14
【问题描述】:
我有一张表,其中有一列 order_date 日期类型。
查询:
INSERT INTO uni_data_temp(sale_order_item_code,
order_date, sale_order_item_status, tracking_number, dispatch_date,
user_id) VALUES ('1000932515', cast('16/05/2015' as date), 'DISPATCHED', 'UNIPAYP1958141', '2015/05/20', '4')
当我运行这个查询时,它给出了错误:
ERROR: date/time field value out of range: "16/05/2015" SQL state: 22008 Hint: Perhaps you need a different "datestyle" setting. Character: 380
然后我改变了查询
INSERT INTO uni_data_temp(sale_order_item_code,
order_date, sale_order_item_status, tracking_number, dispatch_date,
user_id) VALUES ('1000932515', cast('2015/05/16' as date), 'DISPATCHED', 'UNIPAYP1958141', '2015/05/20', '4')
效果很好。
但我的问题是我的日期可能是任何样式(yyyy/mm/dd 或 dd/mm/yyyy)我如何根据数据库进行转换?
任何一种日期格式都可以转换成系统数据库。
谢谢
【问题讨论】:
-
你可以使用
SELECT TO_CHAR(NOW(), 'yyyy/mm/dd')::date; -
如何在我的桌子上应用这个我使用 '16/05/2015' 而不是
now()它仍然给出错误:函数 to_char(unknown, unknown) is not unique -
如果日期“可能是任何风格”,那么你就不走运了。 PG 识别许多日期格式,但有些是模棱两可的,有些有默认解释(在您的情况下为
mm/dd/yyyy)。您可能应该在客户端设置一些标准,以便以特定格式输入所有日期,然后您可以使用to_date()让 PG 理解它,以防它不是 ISO 样式。 -
@Patrick 这对我来说是个坏消息
-
如果你得到不同格式的日期,你也应该从那里得到格式。 IE。给你“01/02/2015”的某个人或系统也应该能够告诉你这是“MM/DD/YYYY”还是“DD/MM/YYYY”。否则无法保证正确导入日期。如果您获得格式,只需应用它:
to_date(:datestring, :formatstring)。
标签: sql postgresql postgresql-9.3