日期 模糊查询 like

ybblack001 2008-11-27 08:55:15
恩 恩 。问题是这样的:
在sql server 2005 数据库内查询时间。字段为dtTime1 datetime类型。格式是 2008-09-09 19:19:10.111
我使用select * from xx where dtTime like ‘%’ 没问题 可以查到所有数据
而使用select * from xx where dtTime like ‘%08%11 %’ 没问题 可以查到08年11月的
但是使用select * from xx where dtTime like ‘%08%11 17%’ 这样就查不到了。
但是
select * from xx where dtTime like ‘%08%11 %17%’也没问题。
求教这个%的使用在datetime内是什么规则?如何才能查到08月11日 17点的所有数据?
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2008-11-27
  • 打赏
  • 举报
回复
%
匹配包含零个或多个字符的任意字符串

-
匹配涉及模式匹配的字符串比较操作(如 LIKE 和 PATINDEX)中的任何单个字符
水族杰纶 2008-11-27
  • 打赏
  • 举报
回复
if object_id('tempdb..#')is not null drop table #
go
create table #(dtTime datetime)
insert # select '2009-08-12 17:21:00.000'
insert # select '2008-08-11 17:21:00.000'
insert # select '2008-09-11 16:21:00.000'
insert # select '2007-06-11 08:21:00.000'
select * from # where datepart(mm,dtTime)='08' and datepart(dd,dtTime)='11'
and datepart(hh,dtTime)='17'
/*dtTime
------------------------------------------------------
2008-08-11 17:21:00.000
*/
CN_SQL 2008-11-27
  • 打赏
  • 举报
回复
上面SELECT手误
CN_SQL 2008-11-27
  • 打赏
  • 举报
回复
就是字符串查询,SQL SERVER会隐式的转换了VARCHAR(40)去查询,你可以看执行计划。
你要知道为什么查不出来,你看看你执行下面的的数据是什么就知道了:


selelct convert(varchar(40),dtTime) from xx
百年树人 2008-11-27
  • 打赏
  • 举报
回复
select datediff(hh,'2008-11-27 18:00:00',getdate())

-----------
3

22,206

社区成员

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

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