Відповіді:
Невеликий недолік у відповіді Марка полягає в тому, що обидва поля дат були введені на клавіатурі, тобто ви не зможете використовувати жодні індекси.
Отже, якщо є необхідність написати запит, який може отримати користь від індексу в полі дати, тоді необхідний наступний (досить згорнутий) підхід.
(DF1 >= CAST(DF2 AS DATE)) AND (DF1 < DATEADD(dd, 1, CAST(DF2 AS DATE)))
PS: Ще одним способом вилучення дати лише (у старих версіях SQL Server) є використання хитрості того, як дата представлена внутрішньо.
CAST(FLOOR(CAST(DF2 AS FLOAT)) AS DATETIME)
Хоча я відповів, що відповідь було позначено як правильну. Я хотів торкнутися кількох речей, щоб хтось натрапив на це.
Загалом, якщо ви фільтруєте спеціально лише значення Дати . Microsoft рекомендує використовувати мовний нейтральний формат ymd
або y-m-d
.
Зауважте, що форма "2007-02-12" вважається нейтральною щодо мови лише для типів даних DATE, DATETIME2 та DATETIMEOFFSET.
Зробити дату порівняння, використовуючи вищезазначений підхід, просто. Розглянемо наступний, надуманий приклад.
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
CONVERT(char(8), OrderDate, 112) = @filterDate
У ідеальному світі слід уникати будь-яких маніпуляцій з відфільтрованим стовпцем, оскільки це може завадити SQL Server ефективно використовувати індекси. Однак, якщо дані, які ви зберігаєте, стосуються лише дати, а не часу, розгляньте їх як DATETIME
півночі, як час. Тому що:
Коли SQL Server перетворює буквальне на тип відфільтрованого стовпця, він приймає півночі, коли часова частина не вказана. Якщо ви хочете, щоб такий фільтр повертав усі рядки із зазначеної дати, вам потрібно переконатися, що ви зберігаєте всі значення як опівночі як час.
Таким чином, якщо припустити, що ви переймаєтесь лише датою, і зберігайте свої дані як такі. Наведений вище запит можна спростити до:
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
OrderDate = @filterDate
Ви можете спробувати це
CONVERT(DATE, GETDATE()) = CONVERT(DATE,'2017-11-16 21:57:20.000')
Я перевіряю це для MS SQL 2014 за наступним кодом
select case when CONVERT(DATE, GETDATE()) = CONVERT(DATE,'2017-11-16 21:57:20.000') then 'ok'
else '' end
Для порівняння дві дати, як MM / DD / РРРР з MM / DD / РРРР . Пам'ятайте, тип першого поля стовпця "Річ" повинен бути dateTime. Приклад: Ім'я стовпця: Payment_date dataType: DateTime .
після цього ви можете легко порівняти його. Запит:
select * from demo_date where date >= '3/1/2015' and date <= '3/31/2015'.
Це дуже просто ...... Це протестувало .....