0

表格是耐心的,日期类型的格式为 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;

我得到了正确的年龄范围但我不想硬编码它们。IE 做 currentdate 减去 25 年等。唯一的问题是我不知道如何转换我的日期时间以进行比较。我想使用 mm-dd-yyyy 我觉得这应该相对容易,但我无法弄清楚。

4

4 回答 4

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天。

于 2013-01-25T16:47:43.667 回答
1

参考 DATAADD 我假设您使用 SQL Server。如果列是日期或日期时间类型,则字符串格式只是一个表示,您可以毫无问题地使用 DATEADD。

但是请注意使用 GETDATE() 取决于当前日期的公式,在这种情况下可能会出现性能问题。

于 2013-01-25T16:48:03.337 回答
0

我们需要知道您使用的是什么 RDBMS。

如果您使用的是 MS SQL Server,则可以使用CONVERT()将此格式更改为日期时间。

SELECT '12-mar-1980', CONVERT(datetime,'12-mar-1980',106)
于 2013-01-25T16:57:25.673 回答
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
于 2013-01-25T17:05:26.813 回答