我的Oracle SQL查询遇到了一个奇怪的问题,我的查询如下:
select *
from user e
where e.year= 2014 and e.user =305 and e.usercat =22 and e.datereg= '25/07/2014'
当选择整个内容时,我可以找到这个特定用户,但是一旦我将 datereg 列添加到查询中,它就不会给我任何结果(0行)!! < / p>
我对此用户的 datereg 列的值有问题,而且其他用户没有问题(当我更改 datereg 值时)。
请问好吗?
答案 0 :(得分:3)
我假设datereg的类型为date。
所以标准应该是:
e.datereg = to_date('25/07/2014','DD/MM/YYYY')
如果datereg还有一个时间部分,请尝试
trunc(e.datereg) = to_date('25/07/2014','DD/MM/YYYY')
这使我得到了与戈登相同的解决方案:)
答案 1 :(得分:2)
当您有时间组件时,通常会发生这种情况。尝试将逻辑更改为:
trunc(e.datereg) = '25/07/2014'
编辑:
您的版本失败,因为带有时间的日期不等于没有时间的日期。这种情况一直发生在使用sysdate
进行比较时,to_date()
有一个时间组件。
如果需要,请使用trunc(e.datereg) = to_date('2014-07-25', 'YYYY-MM-DD')
作为日期常量。我会一直使用ISO标准格式:
trunc(e.datereg) = '25-07-2014'
您还可以使用默认日期格式:
NLS_DATE_FORMAT
但是,这可能会受到国际化设置的影响。
编辑II:
默认情况下,我指的是&#34;默认&#34;值trunc(e.datereg) = DATE '2014-07-25'
。最好明确地进行转换。关于日期常量的使用,Oracle非常documented。我想我现在更喜欢:
{{1}}