我正在使用SQL Oracle DB,在使用SQL Between语句时遇到问题。我需要搜索日期和时间范围之间的值。当我使用下面的SQL语句时,我只接收匹配的结果或空集,但我需要的结果介于包含传递值的值之间。
select id,date
from Table_name
where date between '2020-10-21 10:00:17' AND '2017-10-21 22:00:17'
and id = '123';我收到的是空集
输出示例应为
ID DATE
123 2020-10-21 10:00:17
123 2020-09-07 09:87:22
123 2018-06-09 07:58:01
123 2017-08-12 08:00:10有人能建议在sql语句中修改哪些内容吗
发布于 2021-09-30 10:23:07
尝试在SQL语句中将这两个日期值互换。
解释:此语句中的between表示:
date >= '2020-10-21 10:00:17' and date <= '2017-10-21 22:00:17'正确的说法是:
select id, date
from Table_name
where date between '2017-10-21 22:00:17' and '2020-10-21 10:00:17'
and id = '123';发布于 2021-09-30 11:27:47
您有两个问题:
BETWEEN子句中的上限之前得到范围的下限;BETWEEN子句中的值是字符串文字,而不是DATE值。您希望在BETWEEN子句中使用DATE值:
select id,
date_column
from Table_name
where date_column BETWEEN DATE '2017-10-21' + INTERVAL '22:00:17' HOUR TO SECOND
AND DATE '2020-10-21' + INTERVAL '10:00:17' HOUR TO SECOND
and id = '123';或
select id,
date_column
from Table_name
where date_column BETWEEN TIMESTAMP '2017-10-21 22:00:17'
AND TIMESTAMP '2020-10-21 10:00:17'
and id = '123';或
select id,
date_column
from Table_name
where date_column BETWEEN TO_DATE('2017-10-21 22:00:17', 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2020-10-21 10:00:17', 'YYYY-MM-DD HH24:MI:SS')
and id = '123';如果您使用字符串文字,并且NLS_DATE_FORMAT会话参数不匹配,则会得到一个错误:
select id,
date_column
from Table_name
where date_column between '2017-10-21 22:00:17' and '2020-10-21 10:00:17'
and id = '123';输出:
ORA-01861:文本与格式字符串不匹配
db<>fiddle
https://stackoverflow.com/questions/69390485
复制相似问题