然后使用案例过滤日期

时间:2014-06-27 11:18:43

标签: sql-server tsql

我需要为我的客户团队创建一个视图,以便通过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. 

我不能让这个工作,但帮助将不胜感激!

3 个答案:

答案 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