从dd-mmm-yyyy转换日期类型

时间:2013-01-25 16:36:26

标签: sql oracle date type-conversion case

表是耐心的,日期类型格式为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我觉得这应该相对容易,但我无法弄明白。

4 个答案:

答案 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