2014-01-07 5 views
4

Я хочу найти все записи текущего дня. У меня есть поле Дата типа DATE. Я получаю сообщение об ошибке на SQL сервере'DATE' не является признанным встроенным именем функции

'DATE' is not a recognized built-in function name. 

на этой линии

(DATE(EnterDate) = CURDATE()) 
+2

DATE не является функцией и не является CURDATE(); 'где EnterDate = GETDATE()' –

+2

Если 'EnterDate' является типом' DATE', зачем ему нужна функция 'DATE()' (которая не существует) – Lamak

+1

Вы просмотрели [Типы данных даты и времени и Функции] (http://technet.microsoft.com/en-us/library/ms186724.aspx)? Ни функция DATE, ни 'CURDATE()' не указаны. –

ответ

10

Как указано в ошибке, нет DATEФункция в SQL Server 2008 или 2012 (вы отметили оба значения, поэтому я не уверен, к чему вы нацеливаетесь). Вы можете, однако, приведённый к date типа в SQL Server 2008 и выше:

WHERE EnterDate = CONVERT(date,GETDATE()) 

Обратите внимание, что нет никакого CURDATE функции либо, поэтому я перевел что GETDATE()

+0

Я знаю для факта, используя функцию 'CAST()' для данных даты тип столбца позволяет вашему запросу быть Sargable, это также верно в случае функции 'CONVERT()'? –

+0

Это не факт, но поскольку 'CAST' и' CONVERT' работают одинаково для типов date/datetime, тогда это не имеет значения. –

+0

конструктивная критика: пожалуйста, посмотрите здесь http://msmvps.com/blogs/robfarley/archive/2010/01/22/sargable-functions-in-sql-server.aspx –

3

Используйте следующее условие в вашем где cluase

WHERE CAST(DateColumn AS DATE) = CAST(GETDATE() AS DATE) 
       ^------------ Your Column Name with `Date` or 'DateTime' data type 

CURDATE() является функцией MySQL, в SQL-Server у нас есть функция GETDATE(), чтобы получить текущую дату и время.

+1

«У меня есть поле« Дата типа DATE », означает, что вам не нужно бросать столбец в« DATE » – Lamak

+0

@Lamak Я понимаю это, но когда пользователь пытается использовать CURDATE() функция, чтобы получить сегодняшнюю дату, я считаю, что считать, что столбец, который он утверждает, имеет тип данных DATE, действительно находится в типе данных даты. –

0

Наконец я понял сделано
WHERE EnterDate> Convert (DATETIME, конвертировать (VARCHAR, DATEADD (DAY, 0, GetDate()), 101))

0

Более эффективным является один

WHERE EnterDate > DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) 

Благодаря @d Stanley @marc_S и @Mihai

0

Это не точный ответ, но пример того, как обрезать часть времени с момента даты переменной

CONVERT (VARCHAR (10), date_manufactured, 10) = CONVERT (VARCHAR (10), @ startdate, 10))

Смежные вопросы