Простой DateTime sql запрос - PullRequest
76 голосов
/ 25 мая 2011

Как запросить поле базы данных 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. "

Ответы [ 8 ]

104 голосов
/ 25 мая 2011

Вы пропустили знак одинарной кавычки:

SELECT * 
FROM TABLENAME 
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'

Также рекомендуется использовать формат ISO8601 ГГГГ-ММ-ДДЧч: мм: сс.ннн [Z], так как этот не будет зависеть от вашеголокальная культура сервера.

SELECT *
FROM TABLENAME 
WHERE 
    DateTime >= '2011-04-12T00:00:00.000' AND 
    DateTime <= '2011-05-25T03:53:04.000'
8 голосов
/ 25 мая 2011

Вам нужны кавычки вокруг строки, которую вы пытаетесь выдать за дату, и вы также можете использовать BETWEEN здесь:

 SELECT *
   FROM TABLENAME
  WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'

См. Ответ на следующий вопрос для примеров того, как явно преобразоватьстроки в даты при указании формата:

Sql Конвертация строки в дату сервера

6 голосов
/ 15 сентября 2013

Это сработало для меня как в 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'}
3 голосов
/ 14 июня 2018

Вы можете выполнить ниже код

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14
1 голос
/ 26 сентября 2013

Откройте файл доступа, в который вы пытаетесь экспортировать данные SQL.Удалите все запросы, которые есть.Каждый раз, когда вы запускаете мастер импорта SQL Server, даже в случае сбоя он создает запрос в БД доступа, который необходимо удалить, прежде чем вы сможете снова запустить мастер экспорта SQL.

1 голос
/ 25 мая 2011
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
1 голос
/ 25 мая 2011

Другие уже говорили, что литералы даты в SQL Server должны быть заключены в одинарные кавычки, но я хотел добавить, что вы можете решить проблему смешивания месяца / дня двумя способами (то есть проблема, где 25 рассматривается как месяци 5 день):

  1. Используйте явное Convert(datetime, 'datevalue', style), где стиль является одним из числовых кодов стиля, см. Преобразование и преобразование .Параметр style предназначен не только для преобразования дат в строки, но и для определения способа разбора строк на даты.

  2. Используйте независимый от региона формат для дат, хранящихся в виде строк.Я использую «ггггммдд чч: мм: сс», или рассмотрим формат ISO, yyyy-mm-ddThh:mi:ss.mmm.Основываясь на эксперименте, нет другой строки формата, не зависящей от языка.(Хотя я думаю, что вы можете включить часовой пояс в конце, см. Ссылку выше).

1 голос
/ 25 мая 2011
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

Если это не сработает, пожалуйста, напишите свой стол и разместите его здесь. это поможет нам быстро получить правильный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...