Конвертировать 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,

Другие вопросы по тегам