0

FROM_DAYSmysql で関数を使用する際に問題が発生しました。my_table から年齢を取得したいのですが、これが私のクエリです。

select dob,CURRENT_DATE,
DATE_FORMAT(FROM_DAYS(DATEDIFF(CURRENT_DATE,dob)),'%y yr %c mth %e dy') AS age, 
DATEDIFF(CURRENT_DATE,dob) days from my_table

結果:

dob       || CURRENT_DATE || age              || days  ||
==========++==============++==================++=======++
1953-09-10|| 2013-09-12   || 60 yr 1 mth 3 dy || 21917 ||
2013-09-08|| 2013-09-12   || 00 yr 0 mth 0 dy ||     4 ||

FROM_DAYS(DATEDIFF(CURRENT_DATE,m.tgllahir))2列目でやってみた結果がこれ0000-00-00

そして、日付と時刻の関数を調べてみたところ、これが見つかりました

SELECT FROM_DAYS(730669);
        -> '2007-07-03'

しかし、私が試したとき、これが得られました。

SELECT FROM_DAYS(730669);
        -> '2000-07-03'

FROM_DAYS関数が適切に機能しない理由が気になりますが、私の主な問題は年齢を見つける方法ですか?

編集

Barmarと話し合った結果、FROM_DAYSを使用して正確な年齢を取得できないことがわかったので、別の方法を見つけようとしました

4

4 に答える 4

2
SELECT FLOOR(( DATE_FORMAT(NOW(),'%Y%m%d') - DATE_FORMAT(t.dob,'%Y%m%d'))/10000) AS years,
       FLOOR((1200 + DATE_FORMAT(NOW(),'%m%d') - DATE_FORMAT(t.dob,'%m%d'))/100) %12 AS months,
       (SIGN(DAY(NOW()) - DAY(t.dob))+1)/2 * (DAY(NOW()) - DAY(t.dob)) +
      (SIGN(DAY(NOW()) - DAY(t.dob))+1)/2 * (DAY(NOW()) - DAY(t.dob)) +
      (SIGN(DAY(t.dob) - DAY(NOW()))+1)/2 * (DAY(STR_TO_DATE(DATE_FORMAT(t.dob + INTERVAL 1 MONTH,'%Y-%m-01'),'%Y-%m-%d') - INTERVAL 1 DAY) - DAY(t.dob) + DAY(NOW())) AS days
 FROM tablename t

このクエリを試してください

于 2016-02-15T10:57:07.613 に答える
0

これは、年、月、日で年齢を計算するために使用するクエリです。

SELECT 
username
,dob
,DATE_FORMAT(CURDATE(), '%Y') - DATE_FORMAT(dob, '%Y') - (DATE_FORMAT(CURDATE(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) AS years
,PERIOD_DIFF( DATE_FORMAT(CURDATE(), '%Y%m') , DATE_FORMAT(dob, '%Y%m') ) AS months
,DATEDIFF(CURDATE(),dob) AS days
FROM users
于 2014-06-06T12:28:51.280 に答える