sql身份证15位转18位
时间: 2024-03-06 13:39:52 浏览: 23
在 SQL 中可以使用以下代码将身份证号码由 15 位转为 18 位:
```sql
SELECT LEFT(id_number, 6) + '19' + SUBSTRING(id_number, 7, 9) + RIGHT('10X98765432',
SUBSTRING(id_number, 17, 1) % 10 + 1) AS new_id_number
FROM table_name
WHERE LEN(id_number) = 15;
```
其中,`id_number` 是原始的身份证号码,`table_name` 是包含身份证号码的表名。
以上代码中使用了字符串拼接和字符串截取函数,具体解释如下:
- `LEFT(id_number, 6)`:取身份证前 6 位,即省市县代码。
- `'19'`:在前 6 位后加上年份的前两位数。
- `SUBSTRING(id_number, 7, 9)`:截取身份证号码的第 7 到第 15 位,即出生日期。
- `RIGHT('10X98765432', SUBSTRING(id_number, 17, 1) % 10 + 1)`:根据身份证号码的第 17 位(校验位)计算出新的校验位。
最终得到的 `new_id_number` 就是转换后的身份证号码。
相关问题
sql 根据18位身份证号计算年龄
可以使用SQL语句根据18位身份证号计算年龄,具体步骤如下:
1. 获取身份证号中的出生日期部分:
```sql
SELECT substring('身份证号', 7, 8) AS birthdate FROM table_name;
```
其中,身份证号是一个字符串类型的参数,table_name是你要计算年龄的表名。上述语句中,使用了substring函数获取身份证号中的出生日期部分,从第7个字符开始取8个字符,即出生日期部分。
2. 将出生日期部分转换为日期类型:
```sql
SELECT date_format(str_to_date(substring('身份证号', 7, 8), '%Y%m%d'), '%Y-%m-%d') AS birthdate FROM table_name;
```
上述语句中,使用了str_to_date函数将出生日期部分转换为日期类型,然后使用date_format函数将日期格式化为YYYY-MM-DD的格式。
3. 计算年龄:
```sql
SELECT TIMESTAMPDIFF(YEAR, str_to_date(substring('身份证号', 7, 8), '%Y%m%d'), current_date()) AS age FROM table_name;
```
上述语句中,使用了TIMESTAMPDIFF函数计算出生日期到当前日期之间的年数,从而得到年龄。
需要注意的是,此方法只适用于18位身份证号,如果有其他格式的身份证号需要计算年龄,可以自行编写SQL语句来实现。另外,此方法仅适用于MySQL数据库,其他数据库的函数和语法可能会有所不同。
用hive sql 根据18位身份证号计算年龄
可以使用Hive SQL中的UDF函数来计算18位身份证号对应的年龄,具体步骤如下:
1. 创建UDF函数:
```sql
CREATE FUNCTION get_age(idcard string) RETURNS int
AS 'org.apache.hadoop.hive.contrib.udf.UDFGetAge'
USING JAR 'hdfs:///path/to/hive-contrib.jar';
```
2. 使用UDF函数:
```sql
SELECT get_age('身份证号') AS age FROM table_name;
```
其中,身份证号是一个字符串类型的参数,table_name是你要计算年龄的表名。
需要注意的是,UDFGetAge函数需要使用hive-contrib.jar包,需要先将此jar包上传到HDFS中并指定其路径。另外,此函数只适用于18位身份证号,如果有其他格式的身份证号需要计算年龄,可以自行编写UDF函数来实现。