Простой запрос DateTime sql


86

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


2
Ответ clyc правильный: вам нужно добавить кавычки. Я сделал эту ошибку раньше, потому что , если вы where date = 1/12/2011, например, он будет появляться на работу, но на самом деле разделить 1/12/2011 и получить ноль, а затем обрабатывает ноль в качестве минимального возможного значения даты и времени.
Джон Гибб

Ответы:


121

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

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'

Также не работает Msg 242, Level 16, State 3, Line 1 Преобразование типа данных char в тип данных datetime привело к выходу значения datetime за пределы допустимого диапазона.
ove

@overule - попробуйте использовать второй пример
Alex Aza

@overule - также убедитесь, что ваш столбец имеет тип datetime.
Alex Aza

3
@ Эрик - ггггммдд не успевает.
Alex Aza

8

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

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

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

Преобразование строки сервера sql в дату


Та же ошибка, что и выше. Msg 242, уровень 16, состояние 3, строка 1 Преобразование типа данных char в тип данных datetime привело к выходу значения datetime за пределы допустимого диапазона. Я действительно сбит с толку.
ove

о, я только что скопировал дату и время, у вас есть 25/05, но, вероятно, ожидается месяц / число, так что поменяйте их оба. Я отредактировал свой ответ и связался с хорошим вопросом здесь о SO, который показывает, как явно преобразовать строки в даты
Milimetric

6

Это сработало для меня как в 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'}

6

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

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14

1
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

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


1
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

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

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.