Простой SQL-запрос DateTime
Как мне задать поле базы данных DateTime в определенном диапазоне?
Я использую SQL SERVER 2005
Код ошибки ниже
SELECT *
FROM TABLENAME
WHERE DateTime >= 12/04/2011 12:00:00 AM
AND DateTime <= 25/05/2011 3:53:04 AM
Обратите внимание, что мне нужно получить строки в определенном временном диапазоне. Пример: временной интервал 10 минут.
В настоящее время возвращается SQL с неправильным синтаксисом около "12".
Ответы
Ответ 1
Вы пропустили знак одиночной кавычки:
SELECT *
FROM TABLENAME
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'
Кроме того, рекомендуется использовать формат ISO8601 YYYY-MM-DDThh: mm: ss.nnn [Z], так как это не будет зависеть от локальной культуры вашего сервера.
SELECT *
FROM TABLENAME
WHERE
DateTime >= '2011-04-12T00:00:00.000' AND
DateTime <= '2011-05-25T03:53:04.000'
Ответ 2
Вам нужны кавычки вокруг строки, которую вы пытаетесь передать в качестве даты, и здесь вы также можете использовать МЕЖДУ:
SELECT *
FROM TABLENAME
WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'
См. ответ на следующий вопрос для примеров того, как явным образом преобразовывать строки в даты при указании формата:
Преобразование строки Sql Server в дату
Ответ 3
Это работало для меня как в SQL Server 2005, так и в 2008 году:
SELECT * from TABLE
WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'}
AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}
Ответ 4
Другие уже сказали, что литералы даты в SQL Server требуют окружения одинарными кавычками, но я хотел добавить, что вы можете решить проблему смешивания месяца/дня двумя способами (то есть, проблема, когда 25 рассматривается как месяц и 5 в день):
-
Используйте явный Convert(datetime, 'datevalue', style)
, где style является одним из числовых кодов стиля, см. Вставить и преобразовать. Параметр стиля предназначен не только для преобразования дат в строки, но также для определения того, как строки анализируются по датам.
-
Используйте независимый от региона формат для дат, хранящихся в виде строк. Тот, который я использую, - "yyyymmdd hh: mm: ss" или рассматривает формат ISO, yyyy-mm-ddThh:mi:ss.mmm
. На основе экспериментов нет другой строки, не содержащей языка. (Хотя я думаю, что вы можете включить часовой пояс в конце, см. Выше ссылку).
Ответ 5
Откройте файл доступа, к которому вы пытаетесь экспортировать данные SQL. Удалите все Запросы, которые есть. Каждый раз, когда вы запускаете мастер импорта SQL Server, даже если он терпит неудачу, он создает запрос в базе данных доступа, который необходимо удалить, прежде чем вы сможете снова запустить мастер экспорта SQL.
Ответ 6
SELECT *
FROM TABLENAME
WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
AND [DateTime] <= '2011-05-25 3:35:04 AM'
Если это не сработает, script внесите свой стол и опубликуйте его здесь. это поможет нам быстро получить правильный ответ.
Ответ 7
select getdate()
O/P
----
2011-05-25 17:29:44.763
select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM'
O/P
---
22/06/1432 5:29:44:763PM