【发布时间】:2018-01-10 17:37:42
【问题描述】:
下面的存储过程假设将 OrderCompletionDate 年份作为去年 AND 并将一个月添加到当前月份。
所以如果我在 2018 年 1 月运行它,它会返回 2017 年 2 月的数据,而在 2018 年 2 月,它将返回 2017 年 3 月的数据,依此类推。
我的错误:
当我们到达 12 月时,它会查找不存在的第 13 个月。在这种情况下,我希望它获得当年的一月数据。所以当我们到达 2018 年 12 月时,它应该返回 2018 年 1 月的数据。
我的问题是:
如何更改此存储过程,使其仍返回上一年和上个月的 +1 数据。但是当我们到达 12 月时,它返回的是当年 1 月的数据?
CREATE PROCEDURE [dbo].[usp_GetAnniversaryCustomers]
@date DATE
AS
SET NOCOUNT ON
SELECT
CustomerID,
BAN_ADSL_TN,
REPLACE(LandlinePhoneNumber, ',', '') LandlinePhoneNumber,
REPLACE(MobilePhoneNumber, ',', '') MobilePhoneNumber,
FirstName,
LastName,
REPLACE(ServiceAddress, ',', '') ServiceAddress,
ServiceAddressAptNo,
REPLACE(ServiceAddressCity, ',', '') ServiceAddressCity,
ServiceAddressState,
ServiceAddressZip,
OrderCompletionDate = CONVERT(VARCHAR(10), OrderCompletionDate, 101)
FROM
dbo.Customers
WHERE
StatusID = 115 AND
YEAR(OrderCompletionDate) = YEAR(@date) - 1 AND
MONTH(OrderCompletionDate) = MONTH(@date) + 1
ORDER BY
OrderCompletionDate DESC
【问题讨论】:
标签: sql sql-server tsql