You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何基于字符串格式生日查询员工实时年龄?

计算员工当前年龄(从DD.MM.YYYY格式的字符串生日列)

要解决这个问题,核心分两步:把字符串格式的生日转换成日期类型,再用数据库内置的当前日期函数计算年龄(自动获取查询时刻的日期,无需手动指定)。以下是主流数据库的具体实现:

MySQL/MariaDB

  1. 字符串转日期:使用STR_TO_DATE()函数,指定格式符%d.%m.%Y对应DD.MM.YYYY格式
  2. 计算年龄:TIMESTAMPDIFF()函数能直接计算两个日期的年份差,且会自动处理“生日未过当年”的情况,不会提前加一岁

示例查询:

SELECT 
    employee_name,
    birthday_col,
    TIMESTAMPDIFF(YEAR, STR_TO_DATE(birthday_col, '%d.%m.%Y'), CURDATE()) AS current_age
FROM employees;

PostgreSQL

  1. 字符串转日期:TO_DATE()函数,格式参数用'DD.MM.YYYY'匹配目标格式
  2. 计算年龄:AGE()函数返回当前日期与生日的时间间隔,用EXTRACT(YEAR FROM ...)提取年份部分

示例查询:

SELECT 
    employee_name,
    birthday_col,
    EXTRACT(YEAR FROM AGE(TO_DATE(birthday_col, 'DD.MM.YYYY'))) AS current_age
FROM employees;

SQL Server

  1. 字符串转日期:CONVERT(DATE, birthday_col, 104),其中104是DD.MM.YYYY格式的对应代码;用TRY_CONVERT()可避免转换失败导致整个查询报错
  2. 计算年龄:DATEDIFF(YEAR, ...)会直接按年份差计算,需要额外判断生日是否已过当年,修正提前加一岁的问题

示例查询:

SELECT 
    employee_name,
    birthday_col,
    DATEDIFF(YEAR, CONVERT(DATE, birthday_col, 104), GETDATE()) 
    - CASE 
        WHEN DATEADD(YEAR, DATEDIFF(YEAR, CONVERT(DATE, birthday_col, 104), GETDATE()), CONVERT(DATE, birthday_col, 104)) > GETDATE() 
        THEN 1 
        ELSE 0 
      END AS current_age
FROM employees;

内容的提问来源于stack exchange,提问作者Joker221

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:30:16