2016-01-13 428 views
4

我有一个表,其中有一个列日期类型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)我怎么能按照databse进行转换?

任何一种日期格式转换成系统数据库。

谢谢

+0

你可以用'SELECT TO_CHAR(NOW(), 'YYYY/MM/DD')::日期;' –

+0

我怎么可以把这个在我的表,我用'16/05/2015' 年,而不是现在()它仍然给错误:function to_char(unknown,unknown)is not unique – YAM

+1

如果日期“可能是任何风格“你运气不好。 PG可以识别多种日期格式,但有些不明确,有些默认解释(在你的情况下是'mm/dd/yyyy')。你应该在客户端设置一些标准,以便所有的日期都以特定的格式输入,然后你可以使用'to_date()'让PG了解它,以防它不是ISO风格。 – Patrick

回答

2

您正在使用的日期字符串和依靠会话设置正确interprete字符串。改为使用支持的日期文字以独立于设置。

在PostgreSQL中(以及有关SQL标准的问题)DATE'YYYY-MM-DD'被认为是日期文字,并且是我推荐的格式。因此,使用

INSERT INTO uni_data_temp 
    (sale_order_item_code 
    , order_date 
    , sale_order_item_status 
    , tracking_number 
    , dispatch_date 
    , user_id 
) 
VALUES 
    ('1000932515' 
    , DATE '2015-05-16' 
    , 'DISPATCHED' 
    , 'UNIPAYP1958141' 
    , DATE '2015-05-20' 
    , 4 
); 

(感谢a_horse_with_no_name指着我的PostgreSQL的正确日期文字语法。)

但是,如果你得到的日期从某个字符串,则需要应用根据格式:

TO_DATE('06/05/2015', 'DD/MM/YYYY') 
TO_DATE('05/06/2015', 'MM/DD/YYYY') 
+0

当有人说“这花费10”时,你会问“10什么?美元?美分?欧元?”单独的信息10是不完整的。当有人说把'01/02/2015'这个日期放在数据库中时,你会问:“01是01日还是02月?反之亦然?” “01/02/2015”信息本身并不完整。 DD是一天,MM是一个月,一年是YYYY。如果答案是“今年是月日”,那么格式是“DD/MM/YYYY”。如果你的问题没有得到答案,你不能把数据放到你的数据库中;它是不完整的,你可能错误地导入了错误的数据;所以拒绝这样做。 –

+1

我最喜欢写日期,时间或时间戳文字的方法是ANSI语法:'date'2016-01-13''或'timestamp'2016-01-13 17:38:42''它具有额外的好处跨越多个(尽管不是全部)DBMS –

+0

@a_horse_with_no_name:谢谢他的信息。这也是我喜欢的方式。我知道它在Oracle中工作,但不知道PostgreSQL使用相同的语法。我在postgre中搜索日期文字,所有我发现的是没有日期或timestamp关键字的字符串。 (愚蠢的是,它很容易找到,它在日期/时间函数和运算符http://www.postgresql.org/docs/8.0/static/functions-datetime.html中)。你是对的,应该这样做。我会编辑我的答案。 –

相关问题