SQL Server Формат даты Проблема - PullRequest
0 голосов
/ 21 января 2010

У меня есть этот запрос для отображения записей на основе даты

Select * 
  From orders 
 Where CONVERT(VARCHAR(50), Orderdate, 101) = CONVERT(VARCHAR(50),'1/21/2010', 101) 

Несмотря на то, что на сегодня есть заказы, запрос не выполняется, потому что дата прошла не 21.01.2010 Как я могу исправить эту проблему в самом запросе, поскольку дата, передаваемая другим приложением, равна m / d / yyyy, если дата и месяц меньше 10

Ответы [ 5 ]

2 голосов
/ 21 января 2010

Для простоты избегайте использования функции преобразования до тех пор, пока вам не придется отображать ее на экране, а для даты и времени используйте стандартный формат «YYYY-MM-DD ЧЧ: ММ: СС» ANSI.

SELECT * 
FROM orders 
WHERE Orderdate = '2010-01-21 00:00:00'
0 голосов
/ 22 января 2010

Что такое тип данных для Orders.Orderdate? Каково значение из этого столбца? Как только мы это получим, мы сможем решить вашу проблему.

0 голосов
/ 21 января 2010

Я настоятельно рекомендую вам начать использовать универсальный формат для Sql Server, чтобы избежать этой проблемы из корня и получить понятный код:)

Попробуйте с этим:

Select * 
  From orders 
 Where Orderdate = '20100121'

Формат всегда ггггММдд

Приветствия

0 голосов
/ 21 января 2010

Попробуйте это:

SELECT * FROM orders where CONVERT(VARCHAR(50),Orderdate,101) = CONVERT(varchar(50), CONVERT(datetime,'1/21/2010'),101)

Предполагается, что датой заказа является дата-время.

0 голосов
/ 21 января 2010

Не конвертируйте даты в строки, сравнивайте их, когда они все еще имеют тип данных datetime. Если вы хотите пренебречь временем суток при сравнении, вам следует преобразовать оба значения в 00:00:00 этого дня:

FLOOR(CONVERT(float, OrderDate)) = FLOOR(CONVERT(float, CONVERT(DateTime, '1/21/2010')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...