V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CivAx
V2EX  ›  程序员

MySQL 中如何使用 replace + RegExp 格式化并筛选输出数据的同时保留 null 字段?

  •  
  •   CivAx · 2019-01-11 10:22:43 +08:00 · 1934 次点击
    这是一个创建于 2143 天前的主题,其中的信息可能已经有所发展或是发生改变。

    库:pay

    表:api_user_phone (用户提交的邀请好友 "手机号" 信息)、api_user (用户注册信息)

    SQL 如下:

    SELECT
    	GROUP_CONCAT(   //合并展示,并使用 replace 对手机号进行格式化
    	pay.api_user_phone.name,' ',
    	replace ( replace ( pay.api_user_phone.phone, '-', '' ), ' ', '' )) ,
    	api_user.id     //根据 UserPhoneNum 查询 UserID
    FROM
    	pay.api_user
    LEFT JOIN      
    	pay.api_user_phone ON pay.api_user_phone.user_id = pay.api_user.id  
    WHERE
    	pay.api_user.phone in    //使用 UserPhoneNum 来查询
    ('187xxxxxxxx',
    '135xxxxxxxx',
    	……
    '136xxxxxxxx',
    '137xxxxxxxx')
    AND replace ( replace ( pay.api_user_phone.phone, '-', '' ), ' ', '' )
    REGEXP "^[1][35678][0-9]{9}$"
    GROUP BY
    	pay.api_user.id
    

    这条 SQL 本意是格式化所有 “根据用户手机号对应的 UID ” 查出来的 “邀请手机号” 为无符号的 11 位字符串,并且过滤掉非手机号(如 12345678901 和 4008xxx 这类乱输的数据),但是当该项为 Null (用户没有输入过任何号码)时,因为不匹配正则会被整条数据过滤掉……

    有什么办法保留 Null 数据吗?

    4 条回复    2019-01-11 11:55:31 +08:00
    shaohan0228
        1
    shaohan0228  
       2019-01-11 10:34:25 +08:00
    OR IS NULL?
    CivAx
        2
    CivAx  
    OP
       2019-01-11 10:41:49 +08:00
    @shaohan0228 不行
    yorec
        3
    yorec  
       2019-01-11 11:54:05 +08:00
    来个 UNION 呢?
    liprais
        4
    liprais  
       2019-01-11 11:55:31 +08:00
    case not null 筛选 null 保留 不就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1907 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:34 · PVG 08:34 · LAX 16:34 · JFK 19:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.