0

テーブルは辛抱強く、日付タイプはdd-mon-yyyyの形式であるため、今日は2013年1月25日です。私は誰かの年齢層を決定するために生年月日を比較しようとしています。現在私は持っています:

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

Sql サーバーで。

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 に答える
0

使用している RDBMS を知る必要があります。

MS SQL Server を使用している場合は、 を使用CONVERT()してこの形式を日時に変更できます。

SELECT '12-mar-1980', CONVERT(datetime,'12-mar-1980',106)
于 2013-01-25T16:57:25.673 に答える