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

2019-01-11 10:22:43 +08:00
 CivAx

库: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 数据吗?

1808 次点击
所在节点    程序员
4 条回复
shaohan0228
2019-01-11 10:34:25 +08:00
OR IS NULL?
CivAx
2019-01-11 10:41:49 +08:00
@shaohan0228 不行
yorec
2019-01-11 11:54:05 +08:00
来个 UNION 呢?
liprais
2019-01-11 11:55:31 +08:00
case not null 筛选 null 保留 不就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/525925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX