Проблема даты и времени с хранимой процедурой в SQL Server - PullRequest
1 голос
/ 01 марта 2012

Следующий код не запускается при выполнении кода:

Фрагмент хранимой процедуры:

Нажмите, чтобы увидеть полную версию SP

 AND (@month_ref = 81201 
      AND tsks.grouping_ref = @grouping_ref 
      AND ts.start_dtm BETWEEN convert(datetime, '2011-11-28') 
                           AND convert(datetime,'2012-01-01')
     )
  OR (@month_ref = 81202 
      AND tsks.grouping_ref = @grouping_ref 
      AND ts.start_dtm BETWEEN convert(datetime,'2012-01-02') 
                           AND convert(datetime,'2012-01-29')
     )...

Настройка сервера:

SQL Server настроен как:

  • Язык: английский (США)

И регион и язык Windows Server установлены на:

  • английский (США)

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

БД дизайн / данные

ts.start_dtm выглядит так в базе данных:

  • тип данных - дата и время

    2011-04-01 00:00:00.000
    

Так что его настройка как - YEAR | MONTH | DATE

Моя хранимая процедура жестко кодирует start_dtm как '2012-01-02', который также находится в том же формате.

Можете ли вы помочь мне, пожалуйста?

Проблема в том, что веб-сайт перестает работать при попытке запустить хранимую процедуру. Проблема заключалась в преобразовании данных. Мне пришлось назначить формат конвертации даты.

1 Ответ

1 голос
/ 01 марта 2012

Вам вообще не нужно явно указывать даты.Это формат ISO8601, поэтому база данных должна понимать его сразу:

ts.start_dtm Between '2011-11-28' AND '2012-01-01'

Если вам нужно конвертировать их, укажите, какой формат вы используете для строк:

ts.start_dtm Between convert(datetime,'2011-11-28', 120) AND convert(datetime,'2012-01-01', 120)
...