2017-02-28 72 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'