【问题标题】:To validate DOB(Date of birth) column and AGE column is correct using SQL Statement使用 SQL 语句验证 DOB(出生日期)列和 AGE 列是否正确
【发布时间】:2021-07-03 10:18:12
【问题描述】:

我被困住了,需要帮助来验证同一个表中带有年龄的特殊 DOB 格式,它只会返回根据 AGE 验证不正确的 DOB。

试图在其他线程中找到,但它似乎更倾向于 JavaScript 和编程方面。请帮助我获得预期输出的 SQL 语句是什么:

表:客户

Column 1: NUM

Column 2: DOB 

Column 3: AGE
NUM DOB AGE
1 851201888888 36
2 701128999999 51
3 910303777777 50
4 950202555555 70

**DOB 格式 = YYMMDDXXXXXX(其中 X 是可以忽略的任意随机数)

预期输出:

没有出生年龄

3 910303777777 50

4 950202555555 70

谢谢大家!

【问题讨论】:

  • 存储 DOB 和 Age 没有多大意义,除非这是一个琐碎的问题 :)。年龄不应该根据 DOB 来计算,而且有点不确定吗?

标签: sql database db2 date


【解决方案1】:

我不确定我是否理解这个问题,但您似乎正在寻找 Concatenate (Concat)。

Select Table.*, Concat (Num, ' ', DOB, ' ', Age) as 'No DOB AGE'
From Table

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    试试这个

    WITH t1 (NUM, DOB, AGE) AS (
      VALUES(3, '910303777777', 50)
    ),
    t2 AS (
    SELECT DOB
         , CASE WHEN substr(DOB, 1, 2) > substr(CURRENT date, 3, 2)
            THEN '19' || substr(DOB,1,2) || '-' || substr(DOB,3,2) || '-' || substr(DOB,5,2)
            ELSE '20' || substr(DOB,1,2) || '-' || substr(DOB,3,2) || '-' || substr(DOB,5,2)
           END AS dob_date
         , age      
      FROM t1
    )
    SELECT DOB
         , years_between(CURRENT date, dob_date) AS Age_by_DOB
         , age
      FROM t2
     WHERE years_between(CURRENT date, dob_date) <> age
    

    注意:这也将返回第一行,因为此人尚未 36 岁。您没有提供足够的信息,因此您可能需要根据需要调整此查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      相关资源
      最近更新 更多