簡體   English   中英

MYSQL 查詢年齡計算

[英]MYSQL Query Age Calculation

這是我的 MySQL 查詢從出生日期返回年齡

SELECT
    PensionerDOB,
    YEAR( CURDATE() ) AS Year, 
    DATE_FORMAT( STR_TO_DATE( PensionerDOB, '%d-%M-%Y' ), '%Y') AS age,
    
    YEAR( CURDATE() ) - DATE_FORMAT( STR_TO_DATE(`PensionerDOB`, '%d-%M-%Y' ), '%Y' ) AS differenage 

FROM
    `pensionerbasicdata`

執行查詢。 但它返回的年齡差是負值。

輸出

SELECT *,
       TIMESTAMPDIFF(year, STR_TO_DATE(CONCAT(SUBSTRING_INDEX(PensionerDOB, '-', 2), '-19', SUBSTRING_INDEX(PensionerDOB, '-', -1)), '%d-%M-%Y'), CURRENT_DATE) AS age
FROM pensionerbasicdata

固定 2 位數年份的問題 -所有年份都被視為19xx

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f356258c99b20d13b0c4e2349b801f18

試試這個就行了

詢問,

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(now(),YourDateofBirth)), '%Y')+0 AS Age from AgeCalculationFromDatetime

兩位數的年份是有問題的。 MySQL 文檔

作為 '0' 到 '99' 范圍內的 1 位或 2 位數字字符串。 MySQL 將“0”到“69”和“70”到“99”范圍內的值轉換為 2000 到 2069 和 1970 到 1999 范圍內的 YEAR 值。

作為 0 到 99 范圍內的 1 位或 2 位數字。MySQL 將 1 到 69 和 70 到 99 范圍內的值轉換為 2001 到 2069 和 1970 到 1999 范圍內的 YEAR 值。

SELECT str_to_date('21-Dec-69', '%d-%M-%y')
> 2069-12-21

SELECT str_to_date('21-Dec-70', '%d-%M-%y')
> 1970-12-21

這里 Mysql 沒有按預期解析兩位數的年份。而不是 1945 - 它返回 2065,1953 - 它返回 2053。請按照此鏈接解析兩位數年份的日期。 如何正確使用-str-to-date-mysql-to-parse-two-digit-year-correctly

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM