我需要为我的客户团队创建一个视图,以便通过Excel向老年债务人显示。
我已经获得了所有未结发票的截止日期,我希望达到30,60,90和120天的分类。
我目前的剧本是......
CASE WHEN ST_TRANSMONTH = MONTH(GETDATE())
then '30 Days'
else if ST_TRANSMONTH = MONTH(GETDATE()) + 30 = '60 DAYS' and so on.
我不能让这个工作,但帮助将不胜感激!
答案 0 :(得分:1)
你的数学有一个微妙的缺陷,因为你使用MONTH
检查交易日期的天数,但据我们所知,并非所有月份都有30天,所以你要去介绍一些差异区域,如果你在技术上迟到的时候向人们发送延迟通知,可能会涉及法律问题。
此外,有人可能超过30天到期,但你没有抓住它,因为它是一个不同的月份,例如,他们在上个月25日买了一些东西,现在是这个月的第31个月,他们'重新> 30天过期了,但您没有报告。
使用DATEDIFF
命令代替月份,这是TSQL的一部分。它允许您获得指定单位的两个日期之间的差异:
CASE
WHEN ST_TRANSMONTH > DATEADD(DD, -30, GETDATE()) THEN '30 Days'
WHEN ST_TRANSMONTH > DATEADD(DD, -60, GETDATE()) THEN '60 Days'
-- add more cases as needed
END
尝试改为尝试。
祝你好运。答案 1 :(得分:0)
应该是这样的:
CASE WHEN ST_TRANSMONTH = MONTH(GETDATE()) THEN '30 Days'
WHEN ST_TRANSMONTH = MONTH(GETDATE()) + 1 = '60 DAYS'
WHEN ST_TRANSMONTH = MONTH(GETDATE()) + 2 = '90 DAYS'
END as ColumnName
答案 2 :(得分:0)
你似乎只存储月份,而不是年份?那么你很难检查两个日期之间有多少天/月。您最好存储一个完整的日期(或至少一个月+年)。
如果您存储完整的日期,并且您确实想要检查30天的间隔,那么您可以
select convert(varchar, datediff(day, st_date, getdate())/30*30) + ' days' from mytable
如果您存储完整的日期而您只想查看月份间隔,那么您可以
select convert(varchar, datediff(month, st_date, getdate())/30) + ' days' from mytable