我的表格中的日期显示为 2010-06-16 00:00:00.000
当我使用下面的正则表达式时,不会选择任何行。
select mydate from mytable where mydate like '2010%'
但是,当我使用这个时,行会被正确选择。
select mydate from mytable where mydate like '%2010%'
所以,我认为可能会增加领先的空白区域。考虑到这些,我使用了以下查询。但这也不起作用。
select mydate from mytable where LTRIM(RTRIM(mydate)) like '2010%'
由于第一个有效,这意味着,2010年之前有什么东西?还有白色空间还有什么呢?我尝试将其粘贴到文本文件中,但看不到任何内容。
答案 0 :(得分:2)
如果datatype
为Datetime
,您应使用Year()
功能过滤行而不是like
。您不应使用like
运算符来过滤Datetime
类型的数据。
如果datatype
为Datetime
,那么您将不会有leading
或trailing
个空格。
Date
中有适当的Sql Server
函数使用这些函数来过滤行。
select mydate from mytable where year(mydate) = 2010
甚至Datepart
select mydate from mytable where Datepart(YYYY,mydate) = 2010
答案 1 :(得分:1)
您必须转换datetime
中varchar
的{{1}}才能使用like
select mydate from mytable
WHERE CONVERT(VARCHAR(10),mydate,120) like '2010%'
答案 2 :(得分:0)
您可能应该只使用日期范围提取,例如
从mytable中选择mydate,其中mydate> =' 20100101'和mydate< ' 20110101'
使用列的函数(例如年(mydate))不是一个好主意,因为那时不能使用索引。使用'之间的'也可能导致datetime列出现问题,因为时间部分可能会导致您意外地遗漏行。
您在搜索中发现某些内容的原因可能是由于在比较之前将日期类型转换为varchar,格式是年份结束,但请不要使用它。