计算出生日期SQL DB2并指出错误数据
我正在计算学生入学时的年龄。我尝试过这个查询,但在某些情况下,我有录取日期早于他们出生日期的不良数据 例如:计算出生日期SQL DB2并指出错误数据,sql,db2,subquery,Sql,Db2,Subquery,我正在计算学生入学时的年龄。我尝试过这个查询,但在某些情况下,我有录取日期早于他们出生日期的不良数据 例如: date of birth is 2016-10-22-00.00.00.000000 admission date is 2016-09-09-14.51.00.000000 我得到了0,但我应该得到-负数,所以我可以看出这是坏数据。多谢各位 SELECT * FROM (SELECT student_id, Timestampdiff(25
date of birth is 2016-10-22-00.00.00.000000
admission date is 2016-09-09-14.51.00.000000
我得到了0,但我应该得到-负数,所以我可以看出这是坏数据。多谢各位
SELECT *
FROM (SELECT student_id,
Timestampdiff(256, Char(Timestamp(admission_date) -
Timestamp(date_of_birth)))
AS Admission_DOB
FROM person) AS a
WHERE admission_dob <= '10'
您应该将其作为单独的问题来解决。一个用于计算年龄,另一个用于查找不良数据 因此,查找坏数据应该更简单,如:
SELECT *, 'good data', age(start, end) as age
FROM person
WHERE admission_date > date_of_birth
UNION ALL
SELECT *, 'bad data', null as age -- or age(end, start)
FROM person
WHERE admission_date < date_of_birth
您应该将其作为单独的问题来解决。一个用于计算年龄,另一个用于查找不良数据 因此,查找坏数据应该更简单,如:
SELECT *, 'good data', age(start, end) as age
FROM person
WHERE admission_date > date_of_birth
UNION ALL
SELECT *, 'bad data', null as age -- or age(end, start)
FROM person
WHERE admission_date < date_of_birth
我会用一个案例来说明为什么要将时间戳差异转换为字符?出生日期和入院日期的数据类型是时间戳。如果有更好的方法,请共享它。我在某处找到了这个查询来计算年龄。我不熟悉db2。但是,如果您的字段已经是TIMESTAMP或comvert,则不应使用TIMESTAMP来对结果进行字符化。我会使用case语句。为什么将时间戳差异转换为字符?出生日期和入院日期的数据类型是TIMESTAMP。如果有更好的方法,请共享它。我在某处找到了这个查询来计算年龄。我不熟悉db2。但是如果您的字段已经是TIMESTAMP或comvert,则不应使用TIMESTAMP来对结果进行字符化谢谢您的帮助。但我需要在一个查询中使用它,这样我就可以向我的客户提供一份报告。如果您使用union all呢?查看我的编辑,了解大致思路…年龄是计算年龄的函数谢谢你。我找到了解决这个问题的方法。贴出我的答案。谢谢你的帮助。但我需要在一个查询中使用它,这样我就可以向我的客户提供一份报告。如果您使用union all呢?查看我的编辑,了解大致思路…年龄是计算年龄的函数谢谢你。我找到了解决这个问题的方法。贴出我的答案。我只是贴出对我有帮助的答案。谢谢您的帮助。@user470091-这与本网站的精神不太相符-您发布了一个无法回答的问题,然后窃取了我的代码,并用只有您知道的信息修改了它来回答您的问题。似乎我回答了你的问题-你不觉得吗?你的回答帮助了我,但仍然给了0而不是任何负数,这样我可以很容易地看到结果。我只是发布了对我有帮助的答案。谢谢您的帮助。@user470091-这与本网站的精神不太相符-您发布了一个无法回答的问题,然后窃取了我的代码,并用只有您知道的信息修改了它来回答您的问题。似乎我回答了你的问题-你不觉得吗?你的回答帮助了我,但仍然给了0而不是任何负数,这样我可以很容易地在结果中看到。若要将文本格式化为代码,请选择文本并按ctrl-k键,或在每行前添加4个空格若要格式化为代码,请选择文本并在每行前按ctrl-k键或添加4个空格
SELECT *
FROM (SELECT student_id,
CASE WHEN ar.DT_ACCESS_RCVD < p.DT_BRTH
THEN '-9'
ELSE Timestampdiff(256, Char(Timestamp(admission_date) -
Timestamp(date_of_birth)))
END AS Admission_DOB
FROM person) AS a
WHERE admission_dob <= '10'