PGSQL 根据身份证号码判断人员性别, SQL案例中是对存在身份证号码进行判断

为了清洗包含脏数据的身份证号码,并据此判断用户的性别,我们需要处理三种情况:身份证号码中包含空格、身份证号码为 NULL、以及身份证号码为空字符串。以下是优化后的 SQL 查询语句,它将清晰地处理这些情况,并根据身份证号码的倒数第二位数字来判断性别(奇数为男性,偶数为女性)

-- [表名]: person
-- [字段]: party_id- 主键, card_id- 身份证,sex- 性别
SELECT 
  party_id, 
  -- 使用 regexp_replace 函数去除 card_id 中的所有空格
  regexp_replace(card_id, '[[:space:]]', '', 'g') as card_id,
  CASE
    -- 如果身份证号码为null 或空字符 则性别为 ''
    WHEN regexp_replace(card_id, '[[:space:]]', '', 'g') IS NULL OR regexp_replace(card_id, '[[:space:]]', '', 'g') = '' THEN NULL
    ELSE CASE
      WHEN substring(regexp_replace(card_id, '[[:space:]]', '', 'g') from char_length(regexp_replace(card_id, '[[:space:]]', '', 'g')) - 1 for 1) = '' THEN NULL
      ELSE CASE
        -- 如果倒数第二位数字是偶数,则性别为 0(女性)
        WHEN substring(regexp_replace(card_id, '[[:space:]]', '', 'g') from char_length(regexp_replace(card_id, '[[:space:]]', '', 'g')) - 1 for 1)::int % 2 = 0 THEN 0
        -- 否则,性别为 1(男性)        
        ELSE 1
      END
    END
  END AS sex
FROM person 
WHERE length(card_id) > 1;


posted on 2025-01-03 11:49  我非柠檬为何心酸  阅读(298)  评论(0)    收藏  举报

导航