正则表达式不在datetime列上工作

时间:2015-01-24 03:10:08

标签: sql sql-server

我的表格中的日期显示为 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年之前有什么东西?还有白色空间还有什么呢?我尝试将其粘贴到文本文件中,但看不到任何内容。

3 个答案:

答案 0 :(得分:2)

如果datatypeDatetime,您应使用Year()功能过滤行而不是like。您不应使用like运算符来过滤Datetime类型的数据。

如果datatypeDatetime,那么您将不会有leadingtrailing个空格。

Date中有适当的Sql Server函数使用这些函数来过滤行。

select mydate from mytable where year(mydate) = 2010

甚至Datepart

select mydate from mytable where Datepart(YYYY,mydate) = 2010

答案 1 :(得分:1)

您必须转换datetimevarchar的{​​{1}}才能使用like

select mydate from mytable
WHERE CONVERT(VARCHAR(10),mydate,120) like '2010%'

DEMO

答案 2 :(得分:0)

您可能应该只使用日期范围提取,例如

  

从mytable中选择mydate,其中mydate> =' 20100101'和mydate< ' 20110101'

使用列的函数(例如年(mydate))不是一个好主意,因为那时不能使用索引。使用'之间的'也可能导致datetime列出现问题,因为时间部分可能会导致您意外地遗漏行。

您在搜索中发现某些内容的原因可能是由于在比较之前将日期类型转换为varchar,格式是年份结束,但请不要使用它。