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

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

时间:2025-01-03 12:14:41浏览次数:7  
标签:号码 space 中是 replace 身份证 regexp id card

为了清洗包含脏数据的身份证号码,并据此判断用户的性别,我们需要处理三种情况:身份证号码中包含空格、身份证号码为 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;


标签:号码,space,中是,replace,身份证,regexp,id,card
From: https://www.cnblogs.com/zhangjin0094/p/18649866

相关文章

  • Nodejs中是如何导出模块的?
    在Node.js中,你可以使用module.exports或exports关键字来导出模块,使得其他文件可以通过require关键字来引入和使用这些模块。以下是一些示例:示例1:使用module.exports导出//在一个名为myModule.js的文件中functionmyFunction(){console.log("Hellofrommymodule!");......
  • 代码随想录算法训练营第二十二天| 77.组合、216.组合总和、17.电话号码的字母组合
    目录组合的递归思路来源:77.组合216.组合总和17.电话号码的字母组合组合的递归思路来源(核心是如何用递归实现多重循环):(1)用三重循环实现:3个数中选3个数(可重复),求所有可能 /*11111211312112212313113213321121221322122222......
  • 请问JS中的数组和函数在内存中是如何存储的?
    在JavaScript中,数组和函数在内存中的存储方式主要涉及堆内存(HeapMemory)和栈内存(StackMemory)的使用。这两种数据结构在内存中有着不同的特性和用途。1.数组在内存中的存储数组在JavaScript中是一种特殊的对象,用于表示有序的元素集合。由于数组的大小是可变的,且其元素可以是任......
  • 电话号码的字母组合(回溯)
    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。 示例1:输入:digits="23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf&qu......
  • java面试篇-1.一个“.java“源文件中是否可以包括多个类(不是内部类)?有什么限制?
    在一个 .java 源文件中可以包含多个类(不是内部类),但有一些限制:公共类(publicclass):一个 .java 文件中只能有一个公共类。公共类的名称必须与文件名相同。例如,如果文件名为 MyClass.java,那么公共类的名称也必须是 MyClass。非公共类(non-publicclass):一个 .java 文件......
  • 写一个正则提取字符串中的手机号码
    在前端开发中,你可以使用正则表达式来提取字符串中的手机号码。以下是一个示例的正则表达式,用于匹配中国大陆的手机号码(以1开头,第二位为3-9之间的数字,后面跟着9位数字):constregex=/1[3-9]\d{9}/g;你可以使用String.prototype.match()方法来提取字符串中匹配的手机号码。以下是......
  • 3083. 字符串及其反转中是否存在同一子字符串
    给你一个字符串s,请你判断字符串s是否存在一个长度为2的子字符串,在其反转后的字符串中也出现。如果存在这样的子字符串,返回true;如果不存在,返回false。示例1:输入:s="leetcode"输出:true解释:子字符串"ee"的长度为2,它也出现在reverse(s)=="edocteel"中。示例2......
  • 编写好的代码在CPU中是如何运行的?
    编写好的代码在CPU中的运行过程是一个复杂但精细的流程,涉及多个步骤和组件。以下是从前端开发的角度,对代码在CPU中如何运行的一个概述:一、编写代码前端开发者使用高级编程语言(如JavaScript)编写代码,这些代码描述了程序希望计算机执行的具体任务。编写过程中,开发者需要遵循特定的......
  • 大型项目在css开发过程中是通过什么策略拆分成多个模块的?
    在大型项目的CSS开发过程中,拆分成多个模块的策略主要包括以下几点:模块化设计:首先,根据业务逻辑和功能特点,将整个前端项目划分为若干个独立的模块。每个模块负责一个特定的功能或业务,具有清晰的边界,互不干扰。这种模块化设计有助于降低项目的复杂度,提高代码的可维护性和可复用性。......
  • LeetCode 热题 第17题 电话号码的字母组合
    LeetCode热题17电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。解答classSolution{public:vector<string>letterCombinations......