sql 根据年月计算年龄
时间: 2023-09-20 07:09:33 浏览: 160
假设有一个名为`person`的表格,其中有一个名为`birthday`的列,存储了每个人的出生日期。要根据年月计算年龄,可以使用以下SQL语句:
```sql
SELECT
YEAR(CURDATE()) - YEAR(birthday) -
(RIGHT(CURDATE(), 5) < RIGHT(birthday, 5)) AS age
FROM person;
```
其中,`CURDATE()`函数返回当前日期,`YEAR()`函数返回日期的年份,`RIGHT()`函数返回字符串中的最后几个字符。
该语句将计算每个人的出生年份与当前年份之差,再根据月日判断是否已经过了生日,最终得到每个人的年龄。
相关问题
flink sql 根据身份证计算年龄
如果您的表格中包含用户的身份证号码,您可以使用 Flink SQL 函数来从身份证号码中提取出出生日期,并计算用户的年龄。
以下是一种常见的身份证号码格式:18 位数字,前 6 位表示出生年月日(如 19900101),中间 8 位为地区码,最后 4 位为顺序码。
假设您的表格中包含名为 id_card 的列,其中存储了用户的身份证号码,您可以使用 SUBSTRING 函数来提取出生年月日,然后使用 DATEDIFF 函数计算用户的年龄。
具体地说,您可以使用以下 SQL 语句:
```sql
SELECT DATEDIFF('YEAR', SUBSTRING(id_card, 7, 8), current_date) AS age FROM user_info;
```
这里使用了 SUBSTRING 函数从身份证号码中提取出生年月日,然后使用 DATEDIFF 函数计算用户的年龄。请注意,这里假设用户的身份证号码都是按照标准格式存储在表格中的。
SQLser 根据身份证计算年龄
可以使用 SQL Server 内置的函数来根据身份证计算年龄。以下是一个示例代码:
```sql
DECLARE @idCard VARCHAR(18) = '110101199001011234' -- 身份证号码
DECLARE @birthYear INT = CAST(SUBSTRING(@idCard, 7, 4) AS INT) -- 出生年份
DECLARE @birthMonth INT = CAST(SUBSTRING(@idCard, 11, 2) AS INT) -- 出生月份
DECLARE @birthDay INT = CAST(SUBSTRING(@idCard, 13, 2) AS INT) -- 出生日
DECLARE @nowYear INT = YEAR(GETDATE()) -- 当前年份
DECLARE @nowMonth INT = MONTH(GETDATE()) -- 当前月份
DECLARE @nowDay INT = DAY(GETDATE()) -- 当前日
-- 如果出生日期大于当前日期,则减去一岁
IF (DATEFROMPARTS(@nowYear, @nowMonth, @nowDay) < DATEFROMPARTS(@birthYear, @birthMonth, @birthDay))
SET @birthYear = @birthYear - 1
-- 计算年龄
SELECT @nowYear - @birthYear AS Age
```
示例中使用了 `SUBSTRING` 函数来提取身份证中的出生年月日,使用了 `YEAR`、`MONTH` 和 `DAY` 函数来获取当前日期的年月日,使用了 `DATEFROMPARTS` 函数来构造日期对象,并使用 `SET` 语句来减去可能的一岁。最后使用减法运算符计算年龄。