sql server 两种时间段的比较

powerbulider9 2014-08-25 10:07:44
在写脚本时需要选择一个时间段,一般我都是直接写 out_date between @sdate and @edate,但是同事提供了另一种方法,(datediff(day,out_date,@sdate)<=0 and DATEDIFF(DAY,out_date,@edate)>=0),这种方法不是很懂,比between and好在哪里?
...全文
587 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2014-08-25
  • 打赏
  • 举报
回复
写>= and <=这样的 或者BETWEEN ..AND都可以 效率比他使用函数的要高 前提是你时间字段有索引。
發糞塗牆 2014-08-25
  • 打赏
  • 举报
回复
有一些很炫的功能并不能达到预期的性能效果,最多得到相同的结果而已
發糞塗牆 2014-08-25
  • 打赏
  • 举报
回复
从性能来说,你的方法更好,他的方法会导致索引无效
中国风 2014-08-25
  • 打赏
  • 举报
回复
或用 out_date between @sdate AND @edate
中国风 2014-08-25
  • 打赏
  • 举报
回复
引用 楼主 powerbulider9 的回复:
在写脚本时需要选择一个时间段,一般我都是直接写 out_date between @sdate and @edate,但是同事提供了另一种方法,(datediff(day,out_date,@sdate)<=0 and DATEDIFF(DAY,out_date,@edate)>=0),这种方法不是很懂,比between and好在哪里?
写法性能不可取 ,参数控制只取年月日不要时分秒 out_date>=@sdate and out_date<=@edate
Ny-6000 2014-08-25
  • 打赏
  • 举报
回复
如果字段本身就是日期类型的,还是用他的方法好些. sql系统本身会有一定优化的.
KeepSayingNo 2014-08-25
  • 打赏
  • 举报
回复
你同事的这种写法不仅不好,还存在错误,会漏掉一些记录。他的想法就是out_date和查询起始时间比天,要大于等于0,和结束日期比要小于等于0,那么就认为out_date在这个时间范围内。但是例如,如果out_date是2014-08-25 12:00:00,@sdate是2014-08-25 13:00:00,这样得到的结果也是0,那么out_date就会认为在查询时间范围内,但起始它不在查询时间范围内

select datediff(d,'2014-08-25 12:00:00','2014-08-25 13:00:00')

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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