sql,字符串无规律,如何取出固定的一部分内容

公司有的部门员工有花名,名字重复的时候,后面还会有工号,即系统里抽取的姓名格式可能是

1、姓名  

2、花名-姓名  

3、姓名-工号  

4、花名-姓名-工号  

请问sql要怎么处理,只取出姓名的内容

数据库为postgresql

SQL 访客登录 发布于 2022-9-3 14:26 (编辑于 2022-9-3 14:29)
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
访客登录Lv6初级互助
发布于2022-9-5 09:50

先用正则表达式去掉了工号,然后再用位置匹配去掉了花名,语句如下

SELECT  case when position('-' in REGEXP_REPLACE(user_name , '\-[0-9]+' , '')) > 0 then split_part(REGEXP_REPLACE(user_name , '\-[0-9]+' , '') , '-',2) else REGEXP_REPLACE(user_name , '\-[0-9]+' , '') end as user_name FROM TABLE

  

-- REGEXP_REPLACE(user_name , '\-[0-9]+' , '')   去除工号及其前面的‘-’

-- position('-' in REGEXP_REPLACE(user_name , '\-[0-9]+' , '')) > 0   判断去除工号后用户名是否有‘-’,即判断该员工是否有花名

--split_part(REGEXP_REPLACE(user_name , '\-[0-9]+' , '') , '-',2)   如果有花名,则取‘-’后面的,为员工姓名

最佳回答
0
yzm194155Lv4见习互助
发布于2022-9-3 16:54

https://blog.csdn.net/u010976445/article/details/109027272

  • 访客登录 访客登录(提问者) 我这个应该不太适用吧,花名和姓名都是中文字符,这两怎么区别开
    2022-09-05 09:08 
  • 0关注人数
  • 302浏览人数
  • 最后回答于:2022-9-5 09:50
    请选择关闭问题的原因
    确定 取消
    返回顶部