2015-05-04 7 views
0

Когда я пишу ниже, запрос дает запись.Найти запись между двумя датами

SELECT [srno],[order_no],[order_date],[supplier_name],[item_code],[item_name],[quntity] 
FROM [first].[dbo].[Purchase_Order] 
WHERE order_date BETWEEN '22/04/2015' AND '4/05/2015' 

В этом запросе, если я не добавляю 0 в «4/05/2015» возвращает запись. Но когда я добавляю 0 к дате, то есть '04/05/2015 ' он не дает никаких записей.

SELECT [srno],[order_no],[order_date],[supplier_name],[item_code],[item_name],[quntity] 
FROM [first].[dbo].[Purchase_Order] 
WHERE order_date BETWEEN '22/04/2015' AND '04/05/2015' 
+0

что ваш тип данных 'order_date'? 'date' или' VARCHAR'? – ughai

+0

Думаю, вам нужно будет преобразовать эти строковые литералы в даты. Если ваш столбец «order_date» на самом деле просто varchar. –

+1

Вы можете преобразовать его в тип даты и указать формат, а не в зависимости от встроенного преобразования. –

ответ

1

Причина это не работает, потому что SQL пытается сделать сравнение строк, потому что оба ваших типов строковых типов , Но что вы действительно хотите сравнить с датой.

Вы должны сделать что-то подобное. Поскольку вам нужна только часть даты, вы можете удалить время и использовать стиль 103 для своего формата dd/mm/yyyy.

WHERE CONVERT(DATETIME,LEFT(order_date,10),103) 
BETWEEN CONVERT(DATETIME,'20150422') AND CONVERT(DATETIME,'20150504') 

В качестве альтернативы вы можете использовать это, а если ваш order_date имеет даты, как этот 5/4/2015 03:20:24PM

WHERE CONVERT(DATETIME,LEFT(order_Date,CHARINDEX(' ', order_Date) - 1),103) 
BETWEEN CONVERT(DATETIME,'20150422') AND CONVERT(DATETIME,'20150504') 

Долгосрочное решение, это изменить столбец order_date к DATE/DATETIME

+0

Я конвертирую его в DATETIME Но также он дает ошибку «Ошибка конверсии при преобразовании даты и/или времени из символьной строки.' –

+0

Каков результат этого 'SELECT TOP 1 order_date FROM Purchase_Order WHERE ISDATE (order_date) = 0' – ughai

+0

Его результат 21-04-2015 03:20:24 PM –

1

Это Лучше бросьте его на сегодняшний день, а не зависеть от НЕЯВНЫХ преобразования

SELECT [srno],[order_no],[order_date],[supplier_name],[item_code], 
[item_name],[quntity] FROM [first].[dbo].[Purchase_Order] where 
convert(date,order_date,105) BETWEEN cast('22/04/2015' as Date) AND cast('04/05/2015' as date) 
+0

Он дает ошибку «Ошибка конверсии при преобразовании даты и/или времени из символьной строки». –

+1

Можете ли вы рассказать мне тип ORDER_date и Формат .. ?? – Dhaval

+0

Его тип данных - nvarchar и формат '22 -04-2015 04:24:00 PM ' –

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