SQL Server выдает синтаксическую ошибку

У меня есть следующий SQL для Microsoft SQL Server

SELECT * 
FROM tblA
WHERE CREATION_DATE BETWEEN DATE'2015-09-12' AND DATE'2015-09-15'

Но это выдает синтаксическую ошибку:

Ошибка: неправильный синтаксис около '2015-09-12'. SQLState: S0001 ErrorCode: 102

Что случилось? Я хочу использовать буквенный код ANSI.

4 ответа

Решение

Это не то, как вы играете в MS SQL Server. Вместо этого вы должны попробовать cast синтаксис:

SELECT * 
FROM   tblA
WHERE  creation_date BETWEEN CAST('2015-09-12' AS DATE) AND 
                             CAST('2015-09-15' AS DATE)

Вы можете просто использовать этот запрос, не добавляя дату:

SELECT * 
FROM tblA
WHERE CREATION_DATE BETWEEN '2015-09-12' AND '2015-09-15'
SELECT * 
FROM   tblA
WHERE  CREATION_DATE BETWEEN CAST('2015-09-12' AS DATE) 
                         AND CAST('2015-09-15' AS DATE)

Литералы даты хитры... помимо проблемы с конвертацией (часто в зависимости от культуры вашей системы), вы должны думать о конце дня, если используете между ними!

Здесь вы найдете независимый от системы способ буквального написания дат: https://msdn.microsoft.com/en-us/library/ms187819.aspx?f=255&MSPPError=-2147217396 (см. "ODBC").

Чтобы ты мог написать

BETWEEN {d'2015-09-12'} AND {ts'2015-09-12 23:59:59'}
Другие вопросы по тегам