sql怎么用递归查询怎么查询身份证是否合规,
时间: 2024-05-28 20:04:32 浏览: 57
深入sql oracle递归查询
5星 · 资源好评率100%
1. 用递归查询
在 SQL 中,递归查询可以使用 WITH RECURSIVE 语句来实现。下面是一个例子:
假设有一个员工表,包含字段 emp_id 和 manager_id,其中 manager_id 表示该员工的直接上级的 emp_id。现在需要查询某个员工的所有上级的 emp_id。
WITH RECURSIVE emp_hierarchy(emp_id, manager_id) AS (
SELECT emp_id, manager_id
FROM employee
WHERE emp_id = <指定员工的 ID>
UNION ALL
SELECT e.emp_id, e.manager_id
FROM employee e
INNER JOIN emp_hierarchy eh
ON e.emp_id = eh.manager_id
)
SELECT emp_id FROM emp_hierarchy;
这个查询语句会递归查询指定员工的所有上级,直到没有上级为止,返回的结果是一个 emp_id 列表。
2. 查询身份证是否合规
身份证号码由 18 位数字组成,其中前 17 位表示地区、出生日期和顺序码,最后一位是校验码。校验码的计算方法可以参考国家标准 GB 11643-1999。
以下是一个查询语句示例,用于检查一个身份证号码是否合规:
SELECT
CASE
WHEN
LENGTH(id_card) = 18 AND
REGEXP_LIKE(id_card, '^[0-9]{17}[0-9X]$') AND
SUBSTR('10X98765432', MOD(SUM(SUBSTR(id_card, 1, 17) * POWER(2, ROW_NUMBER() OVER (ORDER BY 1 DESC))), 11) + 1, 1) = SUBSTR(id_card, 18, 1)
THEN '合规'
ELSE '不合规'
END AS check_result
FROM
your_table
WHERE
id_card = '<待检测的身份证号码>';
这个查询语句会判断身份证号码是否符合规则,如果符合则返回“合规”,否则返回“不合规”。
阅读全文