SQL, GETDATE в предложении where - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь использовать свой запрос в качестве текущего дня для моего запроса SQL.

То, что я пытаюсь ниже, возвращает 0 записей:

select * 
from [TEST].[dbo].LIMIT 
where endOfDay = GETDATE()

select * 
from [TEST].[dbo].LIMIT 
where endOfDay = dateadd(dd, datediff(dd, 0, getdate()), 0)

where endOfDay >= getdate() and endOfDay < getdate() + 1 

Примером даты будет 2019-07-09 00:00:00.0

Кроме того, если для текущей даты нет заданной даты, могу ли я получить диапазон дат?

Буду признателен за любую помощь, спасибо.

Ответы [ 5 ]

2 голосов
/ 11 июля 2019

Во-первых, вам нужно опустить кавычки, иначе 'GETDATE ()' - это просто строка.

Во-вторых, чтобы сопоставить по "дням", вам нужно убрать часть времени из результата GETDATE(), что можно сделать с помощью CAST(GETDATE() as DATE) вместо:

select *
from [TEST].[dbo].LIMIT
where endOfDay = CAST(GETDATE() as DATE)

Чтобы это работало лучше, столбец endOfDay также должен иметь тип DATE.Если это что-то еще, вам нужно также CAST или CONVERT endOfDay в DATE.

1 голос
/ 11 июля 2019

Использование кавычек заставляет искать бессмысленный литерал 'GETDATE()', чтобы ничего не найти

Вы можете использовать

with LIMIT(today, EndOfDay) as
( 
select CONVERT(DATETIME, CONVERT(date, GETDATE())), GETDATE()
)
select EndOfDay 
  from LIMIT 
 where EndOfDay >= today and EndOfDay < today + 1;

Демо

0 голосов
/ 11 июля 2019

Если вы не заботитесь о времени, конвертируйте EndofDay и Getdate в простую дату для сравнения.

select * from [TEST].[dbo].LIMIT where convert(date,EndOfDay) = convert(date,getdate())
0 голосов
/ 11 июля 2019

Попробуйте это:

select * 
from [TEST].[dbo].LIMIT 
where cast(endOfDay as date) = cast(GETDATE() as date)

SQL Fiddle , чтобы увидеть, с чем будет сравниваться дата.

0 голосов
/ 11 июля 2019

GETDATE() возвращает текущую дату сервера и время .Если у вас нет записей, которые точно соответствуют этому, не имеет смысла использовать GETDATE.Это не похоже на то, что вы делаете, основываясь на имени столбца endOfDay.

По другим критериям, которые вы показываете, dateadd(dd,datediff(dd,0,getdate()),0), по сути, убирает время и возвращает полночь текущей даты.

select getdate()                                2019-07-11 15:10:09.287
select dateadd(dd,datediff(dd,0,getdate()),0)   2019-07-11 00:00:00.000 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...