Другой вариант - конкатенация строк:
WITH Today(ISO8601) AS (SELECT CONVERT(VARCHAR(10),GETDATE(),126)) --create an ISO8601-string
SELECT DATEADD(DAY,-1,CAST(ISO8601 + 'T23:00:00' AS DATETIME)) AS Yesterday11pm
,CAST(ISO8601 + 'T22:59:59' AS DATETIME) AS TodayEndOfday
FROM Today
CTE создаст строку даты ISO8601, например "2018-06-12"
.Запрос добавляет время (с T
в качестве разделителя) и приводит к DATETIME
.Вчера достигается путем добавления минус 1 день.
ОБНОВЛЕНИЕ
Говоря о добавлении полных дней, вы можете заменить DATEADD
на простой -1
, но яне рекомендовал бы такой подход:
WITH Today(ISO8601) AS (SELECT CONVERT(VARCHAR(10),GETDATE(),126)) --create an ISO8601-string
SELECT CAST(ISO8601 + 'T23:00:00' AS DATETIME)-1 AS Yesterday11pm
,CAST(ISO8601 + 'T22:59:59' AS DATETIME) AS TodayEndOfday
FROM Today
Если вам не нравится подход CTE, вы можете обойтись без:
SELECT CAST(CONVERT(VARCHAR(10),GETDATE(),126) + 'T23:00:00' AS DATETIME)-1 AS Yesterday11pm
,CAST(CONVERT(VARCHAR(10),GETDATE(),126) + 'T22:59:59' AS DATETIME) AS TodayEndOfday