sql - Oracle,查找两个不同日期之间的数据
问题描述
我有一个表名为business_details,列名为business_date,其数据类型为varchar2。
现在我必须找出两个不同日期和日期格式之间的数据,例如:12-JUN-18 21:15:13
意味着,2018 年 6 月 12 日。
请帮我写一个查询,它可以获取这两个日期之间的数据:12-JUN-18 21:15:13 和 25-JUN-18 18:15:32
解决方案
假设您business_date
实际上是您显示的格式的字符串(并且它不是您的客户端仅以该格式显示的日期),您需要将其转换为日期类型,以及转换字符串文字。
select *
from business_details
where to_date(business_date, 'DD-MON-RR HH24:MI:SS')
between to_date('12-JUN-18 21:15:13', 'DD-MON-RR HH24:MI:SS')
and to_date('25-JUN-18 18:15:32', 'DD-MON-RR HH24:MI:SS');
您尝试在评论中使用的格式模型是这样的:
to_date('12-JUN-18 21:15:13', 'DD-MM-YYYY HH24:MI:SS')
正在使用MM
而不是MON
,默认情况下无论如何都可以使用 - 尽管使用月份数字更安全,因为它们不依赖于您的会话语言。但更重要的是它使用YYYY
. 如果您传递一个像 18 这样的 2 位值并尝试与YYYY
您进行转换,则会得到错误的年份:
select to_date('12-JUN-18 21:15:13', 'DD-MON-YYYY HH24:MI:SS') form dual;
TO_DATE('12-JUN-182
-------------------
0018-06-12 21:15:13
在您的版本中,您business_date
正在被隐式转换,因此将使用 NLS 设置,这些设置可能RR
已经在使用。但这意味着您将 2018 年的日期与 0018 年的范围进行比较,这就是为什么没有匹配的原因。
您还可以对固定值使用时间戳文字(除非这些字符串实际上是从其他地方传入的):
select *
from business_details
where to_date(business_date, 'DD-MON-RR HH24:MI:SS')
between cast(timestamp '2018-06-12 21:15:13' as date)
and cast(timestamp '2018-06-25 18:15:32' as date);
推荐阅读
- css - Wordpress 没有在移动设备上显示部分 CSS
- c - 将操作应用于 C 中的整个内存块
- python - 在 PyCharm 的远程解释器上运行远程脚本
- tensorflow - Keras中层之间的身份连接应该怎么做?
- python-3.x - 删除 Pandas 中重复的排列行
- c# - 将 TCP 记录器添加到现有的 Windows 服务而不重建
- c++ - 动态列表和多态性
- ansible-2.x - ansible playbook 处理长时间运行的进程
- javascript - 在 TypeScript 中以相同的 Update 方法添加用户时设置自动 id
- r - 仅保留 RSQLite 列中的第一个单词