Конвертировать nvarchar в дату и получить данные между двумя датами
Я собираю данные между двумя датами с 01.12.2014 по 31.12.2014, но мой тип данных sql в nvarchar
мой запрос правильный?
SELECT * from customer where date >= convert(datetime, '01/12/2014', 105)
AND date <= convert(datetime, '31/12/2014', 105)
Результат
Msg 242, Level 16, State 3, Line 1
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
любой может решить эту проблему...
5 ответов
Решение
Как я знаю, вы должны разделять различные части ДАТЫ с помощью "-", а не с "/" в формате 105. Вот пример:
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
поэтому вы должны переписать свой код как:
SELECT * from customer where date >= convert(datetime, '01-12-2014', 105)
AND date <= convert(datetime, '31-12-2014', 105)
Формат вашей строки, 'dd/mm/yyyy'
это 103, а не 105 (что 'dd-mm-yyyy'
). Итак, просто используйте правильный формат:
SELECT *
FROM customer
WHERE [date] >= CONVERT(datetime, '01/12/2014', 103)
AND [date] <= CONVERT(datetime, '31/12/2014', 103)
Нам действительно нужно конвертировать?
SELECT * FROM DBO.CUSTOMER
WHERE CAST([date] AS DATE) >= '01/12/2014' AND
CAST([date] AS DATE) <= '31/12/2014'
Если ваш тип даты nvarchar, почему бы вам не попробовать вот так:
SELECT * FROM customer
WHERE date >= '01/12/2014'
AND date <= '31/12/2014'
Я предлагаю вам использовать это:
(Я думаю, что преобразование в varchar
это имеет больше смысла)
SELECT *
FROM customer
WHERE CONVERT(varchar, [date], 103) BETWEEN '01/12/2014' AND '31/12/2014'
В стилях даты и времени; 103
для с British/French
стандарт с веком (yyyy
) как это dd/mm/yyyy
,