是否可以使用时间戳而无需在Oracle中将其转换为String?

时间:2014-02-10 18:02:37

标签: sql oracle oracle10g

我有一个查询,其中一个过滤器是日期,是否可以使用下面的内容在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。

3 个答案:

答案 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。