2014-09-25 32 views
0

我想在其創建日期來自2014-09-24的日期時更新字段,但儘管滿足條件,但未發生更新。我想這個問題是CreateDate字段中的時間,比如「2014-09-24 12:25:00」,所以匹配不起作用。查詢日期時間字段而不考慮T-SQL中的時間

如何才能比較日期?

UPDATE MyTable SET SentDate = NULL WHERE Category = 'test' AND CreateDate like '2014-09-24' 
+0

鑄造所需的日期字段隻日期數據類型'SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()));' – xQbert 2014-09-25 13:09:01

回答

0

也許試圖將列轉換是這樣的: ...並轉換(VARCHAR(10),CREATEDATE,101)= 09 /2014分之24'

- SQL服務器用於轉換

語法另一種選擇是選擇一個範圍 ... AND CREATEDATE> = '2014年9月24日' 和CREATEDATE < '2014年9月25日'

+0

這是我在Sql server 2005上的工作! – Pascal 2014-09-25 18:28:43

0

嘗試:

UPDATE MyTable SET SentDate = NULL WHERE Category = 'test' AND CAST(CreateDate as DATE) like '%2014-09-24%' 
+0

類型日期不是定義的系統類型。爲什麼? – Pascal 2014-09-25 13:15:03

+0

您使用的是哪個版本的sql server? – GeoVIP 2014-09-25 13:15:59

+0

Sql server 2005 – Pascal 2014-09-25 13:16:13

-1

這裏是你正在尋找(> = SQL Server 2012中)查詢:

UPDATE MyTable 
SET SentDate = NULL 
WHERE Category = 'test' 
    AND FORMAT(CreateDate, 'yyyy-MM-dd', 'en-US') = '2014-09-24' 

這裏是版本的T-SQL < SQL 2012:

UPDATE MyTable 
SET SentDate = NULL 
WHERE Category = 'test' 
    AND SUBSTRING(CONVERT(SMALLDATETIME, CreateDate, 120), 1, 10) = '2014-09-24' 

Ho PE這將幫助你

+0

'DATE_FORMAT'不是公認的內置函數名稱。 – Pascal 2014-09-25 13:14:34

+1

減號1.問題標記爲tsql,它沒有名爲date_format的函數。 – 2014-09-25 13:14:54

+0

@DanBracuk我修復了這個問題,很抱歉,第一個版本是'MySQL' – 2014-09-25 13:17:43

0

理想情況下,你會這樣做:

UPDATE MyTable 
    SET SentDate = NULL 
WHERE Category = 'test' AND CAST(CreateDate as Date) = '2014-09-24' 

不過,我看你是SQL Server 2005上,不支持Date類型,直到SQL服務器2008年。因此,相反,你應該這樣來做:

UPDATE MyTable 
    SET SentDate = NULL 
WHERE Category = 'test' AND dateadd(dd, datediff(dd,0, CreateDate), 0) = '2014-09-24' 

這通常是一個比排除日期的時間部分的任何基於字符串的方法好很多。或者,你可以這樣做:

UPDATE MyTable 
    SET SentDate = NULL 
WHERE Category = 'test' AND CreateDate >= '2014-09-24' and CreateDate < '2014-09-25'