我有一个查询,其中一个过滤器是日期,是否可以使用下面的内容在Oracle中进行过滤?
SELECT * FROM tabela WHERE dateField = '2014-02-10 15:56:00.000'
或者我们是否总是要将其转换为String?
SELECT * FROM tabela WHERE dateField = TO_DATE('10/02/2014 15:56:00', 'DD/MM/YYYY HH24:mi:ss')
我正在使用Oracle 10g。
答案 0 :(得分:5)
您的第一个查询依赖于隐式数据类型转换,这是一件非常糟糕的事情(并且迟早会给您带来问题)。
第二个正确地将日期与日期进行比较,这是正确的方法。
如果您不想输入那么多,可以使用ANSI SQL时间戳文字:
SELECT *
FROM tabela
WHERE dateField = timestamp '2014-02-10 15:56:00.000';
注意格式必须是文字中的ISO(即yyyy-mm-dd和24小时)
答案 1 :(得分:1)
让我问你 - 你的dateField是如何定义的?作为字符串还是日期? 如果您已将字段定义为日期 - 请使用to_date。如果您有像varchar这样的字段,那么您可以在外面格式化日期并比较字符串。
答案 2 :(得分:0)
TO_DATE函数将日期字符串转换为Oracle日期。
如果数据存储为String,那么只要符合字符串比较,就可以应用任何检查。
如果数据存储为日期,那么您必须像转换那样使用转化,to_date或to_char。