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


83

Як мені запитати поле бази даних 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наприклад, це, здається, спрацює, але насправді розділіть 12.01.2011 і отримаєте нуль, а потім обробляйте нуль як мінімально можливе значення дати та часу.
Джон Гібб,

Відповіді:


117

Ви пропустили одинарну лапку:

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, рівень 16, стан 3, рядок 1 Перетворення типу даних char на тип даних datetime призводило до значень дати та часу поза межами діапазону.
ове

@overule - спробуйте використати другий приклад
Алекс Аза

@overule - також переконайтеся, що у вашій колонці є тип дати та часу.
Алекс Аза,

3
@Eric - yyyymmdd не має часу.
Алекс Аза,

8

Вам потрібні лапки навколо рядка, який ви намагаєтеся передати як дату, і ви також можете використовувати МІЖ тут:

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

Див. Відповідь на наступне запитання для прикладів того, як явно перетворити рядки на дати, одночасно вказавши формат:

Перетворення рядка сервера SQL на дату


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

о, я щойно скопіював ваш час дати, у вас 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'}

5

Ви можете виконати код нижче

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)де стиль є одним із числових кодів стилів, див. Трансляція та конвертування . Параметр стилю призначений не лише для перетворення дат у рядки, але й для визначення способу синтаксичного аналізу рядків за датами.

  2. Використовуйте регіонально-незалежний формат для дат, що зберігаються у вигляді рядків. Використання один я є «YYyyMmDd чч: мм: сс», або розглянути формат ISO, yyyy-mm-ddThh:mi:ss.mmm. На основі експериментів НІЯКОГО іншого мовно-інваріантного рядка формату НЕ існує. (Хоча, на мою думку, ви можете вказати часовий пояс в кінці, див. Посилання вище).


0

Відкрийте файл доступу, до якого ви намагаєтесь експортувати дані SQL. Видаліть усі запити, які там є. Щоразу, коли ви запускаєте майстер імпорту SQL Server, навіть якщо він не вдається, він створює запит у БД Access, який потрібно видалити, перш ніж ви зможете знову запустити майстер експорту SQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.