2014-09-25 2 views
0

Я хочу обновить поле, когда его дата создания со вчерашнего дня 2014-09-24, но обновление не произойдет, хотя условия заполнены. Я думаю, проблема заключается в времени в поле CreateDate, таком как «2014-09-24 12:25:00», поэтому матч не работает.Запросить поле datetime без учета времени в T-SQL

Как я могу сравнить только дату?

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

Cast нужные поля даты только дата тип данных 'ВЫБРАТЬ CONVERT (DATETIME, CONVERT (ДАТА, GETDATE()));' – xQbert

ответ

0

Возможно попытаться преобразовать вашу колонку, как это: ... И CONVERT (VARCHAR (10), CreateDate, 101) = '09/24/2014'

- SQL Server синтаксис, используемый для преобразования

Другим вариантом было бы выбрать диапазон ... И CreateDate> = '2014-09-24' AND CreateDate < '2014-09-25'

+0

Это то, что сработало для меня на сервере Sql 2005! – Pascal

0

Try:

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

Тип дата не определенный тип системы. Зачем? – Pascal

+0

Какую версию сервера sql вы используете? – GeoVIP

+0

Sql server 2005 – Pascal

-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 пэ это поможет вам

+0

'DATE_FORMAT' не является признанным встроенным именем функции. – Pascal

+1

Минус 1. Вопрос отмечен tsql, который не имеет функции с именем date_format. –

+0

@DanBracuk Я исправил его, извините за первую версию, которая была для 'MySQL' –

0

в идеале, вы бы сделайте это так:

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

Однако, я вижу, вы на Sql Server 2005, а Date тип не поддерживается до Sql Server 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' 
Смежные вопросы