Получить последний день предыдущего месяца в SQL - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь получить функцию за последний день предыдущего месяца без отображения времени, то есть 2019-09-30 за последний месяц.

Это код, который я пробовал

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))

ожидаемые результаты сейчас 2019-09-30 фактические результаты

Ответы [ 4 ]

3 голосов
/ 29 октября 2019

попробуйте использовать функцию EOMONTH со смещением:

SELECT EOMONTH('2019-10-29', -1)
1 голос
/ 29 октября 2019

Вы должны попробовать этот способ, как я показал в примере ниже.

Решение 1:

Последний день предыдущего месяца

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
LastDay_PreviousMonth

Решение 2:

Последний день текущего месяца

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth

Решение 3:

Последний день следующего месяца

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))
LastDay_NextMonth
1 голос
/ 29 октября 2019

Если вы берете день сегодняшней даты и вычитаете его из сегодняшней даты, он даст вам последний день предыдущего месяца.

SELECT DATEADD(DY, -DAY(getdate()), cast(getdate() as date))

обратите внимание на приведение типа «ДАТА», чтобы датьтолько дата

1 голос
/ 29 октября 2019

Вы должны использовать функцию EOMONTH(), тип возвращаемого значения date, тогда как тип возвращаемого значения для DATEADD() является динамическим и зависит от аргумента, предоставленного для даты. В вашем случае результатом DATEADD(s,-1, DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0)) является datetime тип данных, потому что 0 является неявно преобразованным в datetime значением 01/01/1900 00:00:00 (неявное преобразование между int и date не являетсяразрешено).

SELECT EOMONTH(DATEADD(month, -1, GETDATE()))
-- or
SELECT EOMONTH(GETDATE(), -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...