SQL 日期字段模糊查询

zhx730621 2019-06-02 08:25:30
数据库有两日期字段,字段名:sblqrq 和 sbghrq ,字段格式:2019-5-31,需要对字段进行模糊查询,比如:查询包含2019年5月全月符合条件的记录,或者 查询某两个日期之间的记录,或者 查询某个日期记录。请教如何编写SQL查询语句。
...全文
274 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2019-06-02
  • 打赏
  • 举报
回复
-- 不知道你是否关注过查询的效率?
-- 如果数据量大, 必须加索引, 并且不要包装字段。
-- #3 那样 Year( 字段 ) = 2019 这种就包装了字段,不可取
-- 一些为了“提高开发效率”可能导致 查询效率 低下的做法是舍本求末,不值得的。

-- 创建索引, 表名你自己替换, 能让查询快起来
CREATE INDEX ix_tableName_sblqrq ON tableName(sblqrq)

-- 全月 ( 5 月 )
WHERE sblqrq >= '2019-05-01' AND sblqrq <'2019-06-01'

-- 某个时间范围 ( 5/1 => 5/9 )
WHERE sblqrq >= '2019-05-01' AND sblqrq <'2019-05-10'

-- 某一天 ( 5/1 )
WHERE sblqrq >= '2019-05-01' AND sblqrq <'2019-05-02'
  • 打赏
  • 举报
回复
where sblqrq between convert('2019-05-01' as date) and convert('2019-05-31' as date) union where sbghrq = convert('2019-05-01' as date) union ...
zhx730621 2019-06-02
  • 打赏
  • 举报
回复
不好意思,日期数据格式写错了,正确的数据格式是:2019/5/31,如果查询两个日期之间的记录,用页面提交,SQL查询语句怎么写比较简单? 感觉 这样写太复杂了,' where sblqrq between '2019-05-01 00:00:00.000' and '2019-05-31 23:59:59.999'
insus 2019-06-02
  • 打赏
  • 举报
回复






详细解释与案例代码:
https://www.cnblogs.com/insus/p/10962090.html
zhx730621 2019-06-02
  • 打赏
  • 举报
回复
sblqrq 和 sbghrq ,这两个字段的数据类型是datetime,
卖水果的net 2019-06-02
  • 打赏
  • 举报
回复
sblqrq 和 sbghrq ,这两个字段的数据类型是什么? date , datetime, varchar 如果是date where sblqrq between '2019-05-01' and '2019-05-31' 如果是 datetime where sblqrq between '2019-05-01 00:00:00.000' and '2019-05-31 23:59:59.999' 如果是 varchar 建议修改为 date 或 datetime ,毕竟数据可能是不规范的。 条件是 两个字段都要满足,还是满足一个就可以? 前者 and, 后者 or 。
卖水果的net 2019-06-02
  • 打赏
  • 举报
回复
引用 9 楼 insus 的回复:
[quote=引用 4 楼 zhx730621 的回复:] 不好意思,日期数据格式写错了,正确的数据格式是:2019/5/31,如果查询两个日期之间的记录,用页面提交,SQL查询语句怎么写比较简单? 感觉 这样写太复杂了,' where sblqrq between '2019-05-01 00:00:00.000' and '2019-05-31 23:59:59.999'
“2019-05-31 23:59:59.999”这是一个错误的时间点,在2019-05-31号这天,根本不可以出现999这个毫秒。 你能显示的,最大为997![/quote] 多谢指点 997,998 都可以, 999,会默认变成 下一天的 000
insus 2019-06-02
  • 打赏
  • 举报
回复
刚才找了一下,发现5年前给风友写过一篇:
https://www.cnblogs.com/insus/p/3800587.html

在16年也写了一篇相关的:
https://www.cnblogs.com/insus/p/5975977.html
insus 2019-06-02
  • 打赏
  • 举报
回复
引用 4 楼 zhx730621 的回复:
不好意思,日期数据格式写错了,正确的数据格式是:2019/5/31,如果查询两个日期之间的记录,用页面提交,SQL查询语句怎么写比较简单?
感觉 这样写太复杂了,' where sblqrq between '2019-05-01 00:00:00.000' and '2019-05-31 23:59:59.999'


“2019-05-31 23:59:59.999”这是一个错误的时间点,在2019-05-31号这天,根本不可以出现999这个毫秒。
你能显示的,最大为997!
卖水果的net 2019-06-02
  • 打赏
  • 举报
回复
引用 4 楼 zhx730621 的回复:
不好意思,日期数据格式写错了,正确的数据格式是:2019/5/31,如果查询两个日期之间的记录,用页面提交,SQL查询语句怎么写比较简单? 感觉 这样写太复杂了,' where sblqrq between '2019-05-01 00:00:00.000' and '2019-05-31 23:59:59.999'
这个不是麻烦,写SQL 本来就要标准一些,如果不是标准的,SQL 会自动给你你转换,如果换成失败,就会出错。 如果转换成功了,但是不是你的预期结果,那样反而更不容易排查问题。
insus 2019-06-02
  • 打赏
  • 举报
回复
引用 5 楼 学海无涯回头是岸 的回复:
where sblqrq between convert('2019-05-01' as date) and convert('2019-05-31' as date)
union
where sbghrq = convert('2019-05-01' as date)
union
...


确认? ms sql有这种写法?
convert('2019-05-01' as date)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧