我在SQL查询中遇到的tdate问题

时间:2019-05-18 15:18:24

标签: sql oracle oracle12c

使用以下查询从表中获取计数

Select count(*)  
from tab 
where tdate = '17-05-19' ---> output 0

Select count(*)  
from tab 
where trunc(tdate) = '17-05-19'  ---->output 0

如果我使用:

Select count(*)  
from tab 
where tdate  >sysdate - 1   ---> it returns some count(yesterday+some of the today txn)

但是在这里,每当我触发此查询时,我只想要昨天txn。

2 个答案:

答案 0 :(得分:0)

如果您尝试使用

Select count(*) from tab where trunc(tdate) = date'2019-05-17'

或者,您可以使用 通过Select count(*) from tab where to_char(tdate,'dd-mm-yy') = '17-05-19'来格式化to_char 函数

或者,您可以使用 Select count(*) from tab where trunc(tdate) = trunc(sysdate)-1 仅获取前一天的数据  )

只要您拥有5月17日的数据,您就会得到一些结果。

因此,您需要为文字提供格式为date'2019-05-17'(称为 date文字),尤其是对于Oracle DB,它可能被用作'2019-05-17',而没有{ {1}}以MySQL为例。

顺便说一句,date函数用于提取日期部分,并删除trunc类型的列值的时间部分。

如果表中装有大量数据,那么性能可能很重要,那么您甚至可以在date上创建功能索引。

Demo

答案 1 :(得分:0)

  

但是在这里,只要我触发此查询,我就只希望昨天txn。

您可以使用它。

Select count (*) from tab where
         tdate >= TRUNC(SYSDATE) - 1 
     AND tdate <  TRUNC(SYSDATE)

与在日期列上使用TRUNC相比,这样做的优势在于,如果索引存在于tdate上,它将利用索引。