表是耐心的,日期类型格式为dd-mon-yyyy所以今天将是25-jan-2013。 我正在尝试比较出生日期以确定某人的年龄组。目前我有:
SELECT patient.last_name, CASE
WHEN patient.birthdate > '01-jan-1988' THEN '1-25'
WHEN patient.birthdate > '01-jan-1963' THEN '25-50'
WHEN patient.birthdate > '01-jan-1938' THEN '50-75'
ELSE '75+'
END
AS "Age Range"
FROM patient;
我得到了正确的年龄范围但我不想硬编码.I。E当前日期减去25年等。唯一的问题是我无法弄清楚如何转换我的日期时间以进行比较。我想使用mm-dd-yyyy我觉得这应该相对容易,但我无法弄明白。
答案 0 :(得分:1)
使用数学:
SELECT patient.last_name,
CASE
WHEN patient.birthdate < SYSDATE-365 THEN '0-1'
WHEN patient.birthdate < SYSDATE-9132 AND patient.birthdate > SYSDATE-365 THEN '1-25'
WHEN patient.birthdate < SYSDATE-18263 AND patient.birthdate > SYSDATE-9132 THEN '25-50'
WHEN patient.birthdate < SYSDATE-27394 AND patient.birthdate > SYSDATE-18263 THEN '50-75'
ELSE '75+'
END AS "Age Range"
FROM patient;
当然,由于闰年,错误将是〜1天。
答案 1 :(得分:1)
引用DATAADD我假设您使用SQL Server。如果列是日期或日期时间类型,字符串格式只是一个rappresentation,您可以使用DATEADD没有问题。
但请注意使用GETDATE()取决于当前日期的公式,在这种情况下可能会出现性能问题。
答案 2 :(得分:0)
我们需要知道您正在使用的RDBMS。
如果您使用的是MS SQL Server,则可以使用CONVERT()
将此格式更改为日期时间。
SELECT '12-mar-1980', CONVERT(datetime,'12-mar-1980',106)
答案 3 :(得分:0)
在Sql-Server中;
SELECT patient.last_name,
case
when datediff(year,patient.birthdate, getdate()) < 26
then '1-25'
when datediff(year,patient.birthdate, getdate())
between 26 and 50 then '26-50'
when datediff(year,patient.birthdate, getdate()) < 76
then '51-75'
else '75+' end [Age Range]
FROM patient