【发布时间】:2015-03-28 10:04:56
【问题描述】:
我需要一个查询,它将根据日期时间条件从 Oracle 数据库中选择记录。示例如下:
SELECT * FROM table_name WHERE [modification_date] >= '2014-01-28T12:00:00Z';
作为日期时间,我使用了 ISO 日期,这是“必须”。在 Oracle XE 数据库中,[modification_date] 列的类型为“Timestamp with time zone”。 现在是我的问题 - 如何将查询中的 ISO 日期转换为对数据库的正确搜索?
我尝试将 to_timestamp_tz 添加到查询语句中。
SELECT * FROM table_name
WHERE MODIFICATION_DATE >= to_timestamp_tz('2014-01-28T00:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS');
但是得到这个错误:
SQL 错误 [1830] [22008]: ORA-01830: 日期格式图片结束于 转换整个输入字符串
【问题讨论】:
-
[modification_date]是无效的列名称。另外:'2014-01-28T12:00:00Z'不是“ISO 日期”。它是一个字符串文字,您需要使用to_timestamp()来创建正确的时间戳值。 -
可能是duplicate of this;但是你的 Z 也固定了吗?
-
Oracle 不支持
TIMESTAMP'2014-01-28T12:00:00Z'文字吗? -
@vanzen - 是的,因为你的 Z 最后。如果已修复,也将其包含在双引号中,但您可能希望将其替换为 UTC 并使用 TZR 模型,或者包含
at time zone utc子句? -
好的,我明白了。查询应如下所示:
SELECT * FROM table_name WHERE MODIFICATION_DATE >= to_timestamp_tz('2014-01-28T13:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"');
标签: sql oracle datetime oracle11g isodate