sql查询案例dateadd

时间:2014-12-30 18:03:32

标签: mysql sql

我可以在SQL Query Select Case语句中使用GetDate和DateAdd吗?我的部分查询如下,但无论客户的出生日期如何,它都只返回OVER60作为结果。有没有更好的方法来实现这一目标?我是这方面的新手,这是Stack Overflow的第一个问题,所以我感谢您的任何见解。

SELECT  G.ClientID, CONVERT(VARCHAR(10), ClientDob, 101) AS ClientDob
, CASE 
        WHEN (G.ClientDob > GETDATE() AND G.ClientDob < dateadd(year, -13, GetDate()))THEN 'Under13' 
        WHEN (G.ClientDob >= DATEADD(YEAR, -13, GETDATE()) AND G.ClientDob < DATEADD(year, -20, GETDATE()))THEN '13-19'
        WHEN (G.ClientDob >= DATEADD(Year, -20, GETDATE()) AND G.ClientDob < DATEADD(Year, -30, GETDATE())) THEN '20-29'
        WHEN (G.ClientDob >= DATEADD(YEAR, -30, GETDATE()) AND G.ClientDob < DATEADD(YEAR, -45, GETDATE())) THEN '30-44'
        WHEN (G.ClientDob >= DATEADD(Year, -45, GETDATE()) AND G.ClientDob < DATEADD(YEAR, -60, GETDATE())) THEN '45-59'
        Else 'OVER60' 
END AS AgeCategory

1 个答案:

答案 0 :(得分:0)

假设SQL Server尽管有MySQL标记 这应该这样做:

SELECT  G.ClientID, CONVERT(VARCHAR(10), ClientDob, 101) AS ClientDob
, CASE 
    WHEN (G.ClientDob > dateadd(year, -13, GetDate()))THEN 'Under13' 
    WHEN (G.ClientDob > DATEADD(year, -20, GETDATE()))THEN '13-19'
    WHEN (G.ClientDob > DATEADD(Year, -30, GETDATE())) THEN '20-29'
    WHEN (G.ClientDob > DATEADD(YEAR, -45, GETDATE())) THEN '30-44'
    WHEN (G.ClientDob > DATEADD(YEAR, -60, GETDATE())) THEN '45-59'
    Else 'OVER60' 
END AS AgeCategory

您有<>混淆,也没有必要在后续WHEN条件中否定先前条件,第一个匹配条件被使用而其他条件都没有被评估。

注意:正如xQbert所指出的,上面假设没有未来的生日存在,如果您的数据中可能存在未来的生日(他们不应该被允许),您可能希望明确处理这些生日。

相关问题