Вторая половина дня,Месяц возвращает неправильное значение с даты
У меня проблема с SQL-сервером, с которой я мог бы справиться с некоторой помощью. Когда я запускаю оператор select с диапазоном дат в том месте, где он возвращает строки из неправильного диапазона дат.
например. Если я выполнить следующие
select * from theTable where startDate between '2016-09-01 00:00:00' and '2016-09-08 23:59:59'
Я бы ожидать строки, где startDate
находится между 1-й и 8-го сентября, что я на самом деле получаю строки с startDate
между 9 января и 9-го августа.
Я проверил язык у меня есть установка на для datebase с помощью:
select * from sys.syslanguages order by name where name = @@language
Это возвращает британцам
DBCC useroptions возвращает
textsize 2147483647
language British
dateformat dmy
datefirst 1
lock_timeout -1
quoted_identifier SET
arithabort SET
ansi_null_dflt_on SET
ansi_warnings SET
ansi_padding SET
ansi_nulls SET
concat_null_yields_null SET
isolation level read committed
Я проверил язык по умолчанию для логин, и это тоже британский.
Когда я исполняю print month('2016-09-01 00:00:00')
Она возвращает 1, а не 9. Если я не ошибаюсь дата и время должны быть выше ODBC канонический yyyy-mm-dd hh:mi:ss(24h)
.
Почему это печатает 1 вместо 9 и, что более важно, как я могу это исправить?
Печать @@version
возвращает
Microsoft SQL Server 2005 - 9.00.5057.00 (X64)
Mar 25 2011 13:33:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
Спасибо за вашу помощь. Если это уже ответили, можете ли вы указать мне на него, только я не могу найти ответ.
Используйте однозначный формат ('YYYYMMDD'):' где startDate> = '20160901' и startDate <'20160909'' – Lamak