假设表名为 table_name
, 身份证字段名为cert_number
,身份证号码形如330103190012012321
假设表名为 table_name
, 身份证字段名为cert_number
,身份证号码形如330103190012012321
差不多类似下面
SELECT
*
FROM
table_name
WHERE
cert_number LIKE "41%"
OR
cert_number LIKE "42%"
HAVING
DATE_ADD(MID(cert_number, 7, 8), INTERVAL 18 YEAR) <= CURDATE()
AND
DATE_ADD(MID(cert_number, 7, 8), INTERVAL 35 YEAR) > CURDATE()
;
10 回答7.5k 阅读
11 回答2.7k 阅读✓ 已解决
9 回答3.2k 阅读
9 回答1.6k 阅读
5 回答787 阅读
4 回答1.8k 阅读✓ 已解决
6 回答1.8k 阅读
假设都是 18 位身份证,取相应位置的字符串转换成数字即可:
只写到年份了,月份和日还要继续精确的话自己往上 AND 吧;如果能在外面把两个日期范围当参数传进来就更好了,取 8 位生日做大小比较就可以了。
不过楼上说的对,这种查询啥索引也用不到,数据量一大一定会卡的不行不行的,最好还有有个冗余字段存一下地区和年月日信息。