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

SQL创建数据表时如何根据出生日期计算年龄?AS语法报错如何解决

问题原因

你写的计算列语法是SQL Server专属语法,其他数据库不支持该格式的AS定义,所以会触发语法报错。

对应数据库修复方案

  • MySQL 5.7+
    需要补充GENERATED ALWAYS关键字,可指定VIRTUAL(查询时计算,不持久化存储,默认值)或者STORED(写入时计算,持久化存储):
CREATE TABLE patients (
    PatientID int PRIMARY KEY NOT NULL,
    FirstName varchar(40) NOT NULL,
    LastName varchar(40) NOT NULL,
    PatientBirthday date,
    PatientAge int GENERATED ALWAYS AS (YEAR(CURRENT_TIMESTAMP) - YEAR(PatientBirthday)) VIRTUAL
);
  • PostgreSQL
    必须指定STORED属性,同时当前日期建议用CURRENT_DATE减少冗余的时分秒处理:
CREATE TABLE patients (
    PatientID int PRIMARY KEY NOT NULL,
    FirstName varchar(40) NOT NULL,
    LastName varchar(40) NOT NULL,
    PatientBirthday date,
    PatientAge int GENERATED ALWAYS AS (EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM PatientBirthday)) STORED
);
  • Oracle
    补充GENERATED ALWAYS关键字即可,无需额外属性:
CREATE TABLE patients (
    PatientID int PRIMARY KEY NOT NULL,
    FirstName varchar(40) NOT NULL,
    LastName varchar(40) NOT NULL,
    PatientBirthday date,
    PatientAge int GENERATED ALWAYS AS (EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM PatientBirthday))
);

额外建议

仅用年份差计算年龄的逻辑不严谨,比如当前为2024年1月1日,用户生日为2023年12月31日,差值为1但实际年龄不足1岁。如果对年龄准确性有要求,更建议查询时通过数据库内置的日期差函数计算,无需提前存储为表字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:45:02