oracle 为什么我不能选择今天的订单返回没有找到行?[副本]

k5ifujac  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(92)

此问题已在此处有答案

Oracle 10g select query by date returning no result(4个答案)
上个月关门了。
我想只选择今天的订单,但它的返回没有找到行,但有很多今天的订单
我使用Oracle SQL
我试过这个查询:

SELECT * 
FROM LAB_RESULTS
WHERE LAB_RESULTS.SERV_REQUEST_DATE BETWEEN TO_DATE('23/08/2023', 'DD/MM/YYYY') 
AND TO_DATE('23/08/2023', 'DD/MM/YYYY')

我也尝试了这个查询,但同样没有返回行:

SELECT * 
FROM LAB_RESULTS
WHERE LAB_RESULTS.SERV_REQUEST_DATE >=  TO_DATE('23/08/2023', 'DD/MM/YYYY')
AND LAB_RESULTS.SERV_REQUEST_DATE <   TO_DATE('23/08/2023', 'DD/MM/YYYY')

输出总是:
没有返回的行
为什么今天没有返回订单需要按时间从00:00到23:59搜索?
我通过在QUERY中添加日期和时间来解决它

SELECT * 
FROM LAB_RESULTS
WHERE LAB_RESULTS.SERV_REQUEST_DATE 
BETWEEN  TO_DATE('23/08/2023 00:00:00', 'DD/MM/YYYY HH24:MI:SS')   
AND TO_DATE('23/08/2023 23:59:55', 'DD/MM/YYYY HH24:MI:SS')
j5fpnvbx

j5fpnvbx1#

这是因为您选择了serv_request_date**等于23.08.2023 00:00:00的行(并且没有这样的行)。
尝试

where serv_request_date >= date '2023-08-23'
  and serv_request_date <  date '2023-08-24'

而不是.
另一个更容易编写的选项是

where trunc(serv_request_date) = date '2023-08-23'

但是它不会在serv_request_date列上使用索引(如果它存在的话),所以性能可能会受到影响,除非你创建了一个基于函数的索引。

vecaoik1

vecaoik12#

您没有收到任何响应,因为查询没有返回行。我通常会先对行数进行计数,看看是否需要做什么,然后如果行数大于0,则运行查询。这样的事情

SELECT CASE COUNT(*) WHEN 0 THEN 'No Rows Returned'  ELSE 'data present' END as testresult FROM LAB_RESULTS WHERE LAB_RESULTS.SERV_REQUEST_DATE BETWEEN TO_DATE('23/08/2023', 'DD/MM/YYYY') AND TO_DATE('23/08/2023', 'DD/MM/YYYY')

如果这是存储过程的一部分(或在代码中),则可以使用结果运行主查询

IF SELECT COUNT(*) FROM LAB_RESULTS WHERE LAB_RESULTS.SERV_REQUEST_DATE BETWEEN TO_DATE('23/08/2023', 'DD/MM/YYYY') AND TO_DATE('23/08/2023', 'DD/MM/YYYY') > 0 THEN SELECT * FROM LAB_RESULTS WHERE LAB_RESULTS.SERV_REQUEST_DATE BETWEEN TO_DATE('23/08/2023', 'DD/MM/YYYY')  AND TO_DATE('23/08/2023', 'DD/MM/YYYY')

相关问题