Форматирование дат в SqlServer для сравнения - PullRequest
0 голосов
/ 09 февраля 2010

Это должно быть просто

У меня есть столбец даты в таблице A

ВЫБРАТЬ * ИЗ ТАБЛИЦЫ, ГДЕ DTE = '01 / 02/2010 '

Проблема в том,что это развернуто на серверах США, и я не могу контролировать дату как аргумент.

Как я могу сказать SqlServer обрабатывать эту дату как имеющую этот формат ??

Я дал попробовать это:

ВЫБРАТЬ * ИЗ ТАБЛИЦЫ ГДЕ DTE = CONVERT (VARCHAR (10), «01/01/2010», 101) AS [ДД / ММ / ГГГГ]

Ответы [ 4 ]

1 голос
/ 09 февраля 2010

Ознакомьтесь с этой справочной статьей: Полное руководство по типам данных datetime

РЕДАКТИРОВАТЬ: В частности, что Тибор говорит о SET DATEFORMAT & SET LANGUAGE, поскольку вы упоминаете, что не можете контролировать формат ввода.

1 голос
/ 09 февраля 2010

Ваша последняя попытка была почти правильной, но она должна была быть

SELECT * FROM TABLEA WHERE AS_OF_DATE = CONVERT(DATETIME, '01/01/2010', 101)
1 голос
/ 09 февраля 2010

Используйте безопасный формат. Для дат (без компонента времени) безопасным форматом является ГГГГММДД, например сегодня «20100209». ​​

Для datetime безопасным форматом является YYYY-MM-DD'T'HH: mm: SS, где 'T' - это буквальный T, поэтому сейчас '2010-02-09T11: 10: 30'.

(Когда я говорю «безопасно», я имею в виду, что SQL Server всегда, однозначно, знает, как преобразовать эти строки в значения даты и времени)

0 голосов
/ 09 февраля 2010

Другой вариант - двойное преобразование (проверьте эффективность при использовании в качестве критерия):

select strTempNo, dtmTempDateStart,
    convert(varchar(10), Convert(datetime, dtmTempDateStart, 103), 126) As UTCDate

Я использую 103 здесь, поскольку данные уже в формате UTC, но это также работает (UTC ISO8601 - 126). Если известно, что ваши даты всегда в американском формате, вы должны использовать 101.

В качестве альтернативы используйте 112 («безопасный» формат ISO) и вырежьте первые 8 символов из строки.

Пример данных: (Извините, американская таблица дат недоступна)

  • 521002 2008-09-1500: 00: 00.000 2008-09-15
  • 580195 2008-04-1500: 00: 00.000 2008-04-15
  • 530058 2008-09-2200: 00: 00.000 2008-09-22
  • 580194 2008-04-0200: 00: 00.000 2008-04-02
  • 500897 2008-07-0100: 00: 00.000 2008-07-01
  • 500966 2008-09-2300: 00: 00.000 2008-09-23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...