高手请进:时间模糊查询一个很变态的问题!

shengyongwang 2009-04-26 08:40:44
我从数据库中查询的时候遇到过一个怪问题:

数据库表myTalbe中的LoginTime字段的值是:2009-03-03 12:31 :56 ,我的sql语句如下:

select * from myTable where LoginTime like '%2009%',这样就可以把已2009开头的可以查出来,但是我想通过年和月进行模糊查询的时候,就查不出来了,sql语句如下:select * from myTable where LoginTime like '%2009-03%'.语法没有错误,但就是差不出来,于是我把数据库中LoginTime的值换成:2009-03-03 ,在执行上面的两个语句都可以查出来,这就排除了“-”的问题,于是在网上查了下说like进行查询的时候空格有个时候也会出现问题,我估计是天和时间中的空格,但是找不到解决的办法。于是在群中求助,一个朋友换了一种方法进行查询:selct * from myTalbe where DateName(yyyy,loginTime) +'-' +dateName(mm,loginTime) ='2009-03'这样上面两中情况就都可以查出来,不过我有一个疑问就是,我写='2009-03'和like ‘2009-03’是一个效果,这个不知道是什么原因。

如果大家对于我这个问题有什么好的建议和方法,欢迎大家发表,学习是个探讨的过程,让我们共同进步。
...全文
122 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shengyongwang 2009-04-28
  • 打赏
  • 举报
回复
恩,是的。谢谢指教。
人生就是赌 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shengyongwang 的回复:]
谢谢楼上的,我照你写的sql语句果然是正确的,感谢,学习了。
[/Quote]
搞清楚原理最重要
benbirdar 2009-04-28
  • 打赏
  • 举报
回复
select * from myTable where LoginTime like '%2009-03%'
这里的LoginTime是datetime类型,需要转换成Varchar以后,再作为字符类型模糊查询。
newtofy 2009-04-28
  • 打赏
  • 举报
回复
还是好好研究一下where datediff(m,logintime,'2009-03-01')= 0 吧

datediff处理大部分的时间查询都是游刃有余
rockey116 2009-04-27
  • 打赏
  • 举报
回复
select * from Aviation where year(LoginTime) = '2009' and month(LoginTime)='3'
shengyongwang 2009-04-26
  • 打赏
  • 举报
回复
谢谢楼上的,我照你写的sql语句果然是正确的,感谢,学习了。
zhaoqiliang527 2009-04-26
  • 打赏
  • 举报
回复
select * from Aviation where convert(nvarchar(20),FromTime,120) like '%2009-03%'
sql语句的问题!
shengyongwang 2009-04-26
  • 打赏
  • 举报
回复
楼上正解,确实是。我刚开始去掉了后面的日期部分,所以不是时间格式。
yangqidong 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shengyongwang 的回复:]
  我的logintime是datetime类型,我试了,日期不能够这样写:2009-03,它包从字符串向 datetime 转换时失败的错误,当写成200903的时候就没有错误。2009/03这样好像也不行
[/Quote]
选择月份的时候,随便拼上一个日期比如01,再用datediff
datediff(m,logintime,'2009-03-01')= 0 m代表你要比较两个日期是不是同一个月份
改成y 或d代表年和日
shengyongwang 2009-04-26
  • 打赏
  • 举报
回复
我的logintime是datetime类型,我试了,日期不能够这样写:2009-03,它包从字符串向 datetime 转换时失败的错误,当写成200903的时候就没有错误。2009/03这样好像也不行
cpp2017 2009-04-26
  • 打赏
  • 举报
回复
logintime是datetime类型吗?
如果是可以用

where datediff(m,logintime,'2009-03-01')= 0

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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