Вчера в формате ГГГГММДД в ​​SQL Server - PullRequest
0 голосов
/ 02 октября 2019

Я хочу добавить условие в мой и без того плохо работающий код SQL. Я хочу добавить в фильтр, где дата = вчера (тип данных INT).

Например,

Select * 
From table
Where Date = 20190930

Как мне это сделать, используя GETDATE() - 1?

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Нам нужно четко понимать, какой тип данных вы используете.

Если у вас есть простое значение date (без компонента времени как части типа данных), все довольно просто:

Select * 
from table
where Date = DATEADD(day, -1, cast(current_timestamp as date))

Если у вас есть DateTime или *Значение 1008 *, важно понимать, что все значения DateTime имеют компонент времени, который идет вплоть до миллисекунд. Это верно даже в том случае, если вы ожидаете, что компонент времени будет всегда или около полуночи. Это может сделать прямые сравнения равенства трудными. Вместо этого вам почти всегда требуется проверка в определенном диапазоне :

Select * 
from table
where Date >= DATEADD(day, -1, cast(current_timestamp as date))
    AND Date < cast(current_timestamp as date)
0 голосов
/ 02 октября 2019

Вот ваш запрос.

Во-первых, вам нужно преобразовать вашу int дату в varchar, прежде чем вводить ее в datetime, чтобы избежать ошибки арифметического потока во время преобразования.

Во-вторых, вам нужно привести getdate() - 1 к date, чтобы укоротить время до поля даты.

select *
from table
where cast((cast(date as varchar(8))as datetime) = cast(getdate() - 1 as date)

или

select *
from table
where cast((cast(date as varchar(8)) as date) = cast(dateadd(day,datediff(day,1,GETDATE()),0) as date)
...