2013-11-07 5 views
0

Я пытаюсь выполнить следующий запрос в SQL Server 2005.формат DateTime в SQL Server 2005

SELECT * 
FROM [WAGON_LOADING].[dbo].[WEIGHT_DATA] 
WHERE [DATEANDTIME] BETWEEN '2013-11-7 0:00:00.000' AND '2013-11-7 23:59:59.000' 

синтаксис в запросе в порядке. Но когда я выполняю запрос, он не показывает выход (база данных имеет только сегодняшние данные, т.е. 7 ноября), но когда я меняю дату в запросе на 2013-7-11 0:00:00.000 И 2013-7-11 23:59:59.000 Я получаю все значения.

В чем может быть проблема?

ответ

2

Никогда не полагайтесь на неявные преобразования из строки на дату (или на любое неявное преобразование, если на то пошло). Используйте метод преобразования и укажите формат.

+0

Заметим, что '' YYYYMMDD' и YYYY-MM-DD' оба являются язык нейтральны и не зависит от 'SET DATEFORMAT' и' SET настройки LANGUAGE'. http://msdn.microsoft.com/en-us/library/ms187819.aspx – wdosanjos

0

Похоже, что SQL Server анализирует ваши даты не по порядку. Вы можете настроить это, используя SET DATEFORMAT с одним из numeric date format values.

По умолчанию для вашего сервера указан столбец [dateformat] в строке sys.syslanguages, соответствующей вашему текущему language setting.

1

Попробуйте следующее. YYYYMMDD - это самый надежный формат даты на SQL Server.

SELECT * FROM [WAGON_LOADING].[dbo].[WEIGHT_DATA] 
WHERE [DATEANDTIME] >= '20131107' AND [DATEANDTIME] < '20131108' 
0

Попробуйте как этот

SELECT * 
FROM PURCHASE 
WHERE OrderDate >='2004-03-01 00:00:00.000' AND OrderDate < '2004-04-01 00:00:00.000' 
Смежные вопросы