2017-02-28 97 views
0

我有一个像下面使用SQL Server LIKE操作

select * 
from tbltask 
where taskstartdate = '2017-02-13 15:23:00.000' 
一个SQL查询

此执行查询时,我得到正确的数据,但是,我想用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%' 

,但这正显示出我的空白数据,

什么是错误的,我喜欢的查询?

+0

它不建议得到具体日期时使用'LIKE'操作。 –

回答

0

您可以使用DATEPART函数来提取部分日期。它也应该让你的查询更加明确你希望达到的目的是什么:

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

(也有专门命名功能,如年份和月份,但我更喜欢DATEPART的一致性,因为它可以访问日期时间的所有组件)

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

0

为根据您的情况使用下面的代码使用Like操作: -

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

:使用Like运营商,日期是不是最佳做法,使用DATEPART代替。

0

使用日期转换。它会解决你的问题。

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

您可以使用之间,该范围

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

应用像datetime列算不算好之间找出数据。它不会使用索引。当你使用像运算符时,你需要查询下面的内容。

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'