当前位置: 代码迷 >> Sql Server >> sqlserver 时间段查询,该如何处理
  详细解决方案

sqlserver 时间段查询,该如何处理

热度:33   发布时间:2016-04-24 09:12:08.0
sqlserver 时间段查询

这样查不出数据,
select * from aaa
where pTime>=CONVERT(VARCHAR,'2015/4/10',111) and pTime<=CONVERT(VARCHAR,'2014/4/15',111)

这样有数据
select * from aaa
where pTime>=CONVERT(VARCHAR,'2015/4/10',111) 

求解sqlserver2005
------解决思路----------------------
把表aaa中pTime时间格式贴出来。 另外,这两个语句也不是等价的
------解决思路----------------------

--try this
select * from aaa
where pTime between CONVERT(datetime,'2015/4/10') and CONVERT(datetime,'2014/4/15')

------解决思路----------------------
引用:
2015-04-15 14:42:10.000

Quote: 引用:

把表aaa中pTime时间格式贴出来。 另外,这两个语句也不是等价的

pTime是一个DateTime类型 ,2015/4/10或者2015/4/15是Date类型。
把后面的部分(红色标记)加1天,然后去掉等于
select * from aaa
where pTime>=CONVERT(VARCHAR,'2015/4/10',111) and pTime  < CONVERT(VARCHAR,'2014/4/16',111)
------解决思路----------------------
引用:
试过了没数据

Quote: 引用:


--try this
select * from aaa
where pTime between CONVERT(datetime,'2015/4/10') and CONVERT(datetime,'2014/4/15')

这个当然没数据了,2015-04-15 14:42:10.000 显然不在2015/4/10和2014/4/15之间
------解决思路----------------------
引用:
Quote: 引用:

2015-04-15 14:42:10.000

Quote: 引用:

把表aaa中pTime时间格式贴出来。 另外,这两个语句也不是等价的

pTime是一个DateTime类型 ,2015/4/10或者2015/4/15是Date类型。
把后面的部分(红色标记)加1天,然后去掉等于
select * from aaa
where pTime>=CONVERT(VARCHAR,'2015/4/10',111) and pTime  < CONVERT(VARCHAR,'2014/4/16',111)

select * from aaa
where pTime>=CONVERT(VARCHAR,'2015/4/10',111) and pTime  < CONVERT(VARCHAR,'2015/4/16',111)
------解决思路----------------------

--要看你的pTime格式,精度有要求的话可以这样
select * from aaa
where pTime between CONVERT(datetime,'2015/4/10') and CONVERT(datetime,'2014/4/15 23:59:999',)

------解决思路----------------------
pTime>=CONVERT(VARCHAR,'2015/4/10',111) and pTime<=CONVERT(VARCHAR,'2014/4/15',111)

这句不觉得矛盾吗?  翻译一下就是时间大于2015年4月10日,且时间小于等于14年4月15日,哥,这不是空白时间吗? 咋会取到数
------解决思路----------------------
如果表中只有“2015-04-15 14:42:10.000”这一条记录的话,第一条SQL语句肯定不会返回结果,第二条SQL语句会返回这条记录。
CONVERT(VARCHAR,'2014/4/15',111)这一句会返回“2015-04-15 00:00:00.000”这样的结果,所以第一条SQL语句肯定没结果。

如果pTime是DateTime类型,那就用下面的语句:
select * from aaa
where convert(varchar, pTime,111)>='2015/04/10' and convert(varchar, pTime,111)<='2014/04/15'

------解决思路----------------------
pTime 是什么数据类型?
------解决思路----------------------
如九楼,估计是楼主笔误了


------解决思路----------------------
引用:
pTime>=CONVERT(VARCHAR,'2015/4/10',111) and pTime<=CONVERT(VARCHAR,'2014/4/15',111)

这句不觉得矛盾吗?  翻译一下就是时间大于2015年4月10日,且时间小于等于14年4月15日,哥,这不是空白时间吗? 咋会取到数


这是正解。楼主眼拙了
------解决思路----------------------
 sql 时间转换格式 convert(varchar(10),字段名,转换格式)
 sql 时间转换格式 convert(varchar(10),字段名,转换格式) 供参考!
  相关解决方案