在SQL Server中使用LIKE运算符

时间:2017-02-28 06:28:46

标签: sql-server sql-like

我有一个SQL查询,如下所示

select * 
from tbltask 
where taskstartdate = '2017-02-13 15:23:00.000'

此查询正在执行,我正在获取正确的数据但是,我想使用like命令而不是=

所以我将查询更改为以下

SELECT * 
FROM tblTask 
WHERE TaskStartDate LIKE '%2017%'

有了这个,我得到了2017年的数据。

这是我的一行

038815c1-d8b3-43c8-bd28-1bc8cf7c0688    101 30b3af65-3222-42c4-8d6e-25ec275c5ba1    test    2017-02-13 15:23:00.000 2017-02-13 15:23:00.000 testing 2017-02-13 15:23:00.000 NULL        WIP 0   0   2   0   1   7788e4b1-e702-4c8a-9dfc-6ce7081f0a93    2017-02-13 15:47:14.747 0   NULL    30b3af65-3222-42c4-8d6e-25ec275c5ba1    1   NULL    0   30b3af65-3222-42c4-8d6e-25ec275c5ba1    0   Low ~/TaskFile/error-bg.jpg 0   NULL    0   0,0,0,0,0,0 0   NULL

但是我想获取特定日期的数据,所以我再次将查询更改为以下内容并获取上面显示的行的数据

SELECT * 
FROM tblTask 
WHERE TaskStartDate LIKE '%2017-02-13 15:23:00.000%'

但是这显示了空白数据,

我的查询有什么问题?

5 个答案:

答案 0 :(得分:0)

您可以使用DATEPART功能提取部分日期。它还应该使您的查询更明确地了解您正在寻求实现的目标:

  select * 
  from tbltask 
  where 
      DATEPART(year,taskstartdate )=2017 and
      DATEPART(month,taskstartdate ) between 1 and 3
  

(还有一些特别命名的函数,例如MONTH和YEAR,但我更喜欢DATEPART的一致性,因为它可以访问日期时间的所有组件)

您应该尽量避免将日期时间视为具有任何类型的字符串格式。将它们视为字符串是我们遇到的最大错误来源之一。

答案 1 :(得分:0)

根据您的场景使用Like运算符使用下一个代码: -

SELECT * 
FROM #tblTask 
WHERE convert(datetime2,TaskStartDate) LIKE '%2017-02-13 15:23:00.000%'

注意:使用带有日期的Like运算符不是最佳做法,请改用DATEPART

答案 2 :(得分:0)

使用日期投射。它会解决你的问题。

CAST(TaskStartDate AS DATETIME) = CAST('2017-02-13 15:23:00.000'AS DATETIME)

答案 3 :(得分:0)

您可以使用BETWEEN来查找该范围之间的数据

 SELECT * 
FROM tblTask 
WHERE TaskStartDate BETWEEN '2017-02-13 00:00:00.000' AND '2017-02-13 23:59:59.000'

答案 4 :(得分:0)

在datetime列上应用like运算符并不好。它不会使用索引。当您使用like运算符时,您需要查询类似下面的内容。

select * 
from tbltask 
where CONVERT(CHAR(8), taskstartdate, 112) like '%20170213%'

注意:上述查询将选择日期为2017-02-13的所有行,而不考虑时间。

为了获得更好的性能,请使用以下查询

select * 
from tbltask 
where taskstartdate>= '2017-02-13' and taskstartdate<'2017-02-14'