2014-09-25 33 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'