mysql定位多个分隔符

mysql定位多个分隔符,mysql,string,locate,Mysql,String,Locate,在我们的数据库中,我们有一个name列,我试图使用|或空格分隔符来选择first和last。现在,我们的代码适用于空间名称,但我需要将其拆分为任意一个 表.namefirst-lastfirst2 | last2 select substr(upper(mid(vo.name, 1, locate(' ',vo.name)-1)),1,20) as 'First Name', substr(upper(mid(vo.name, locate(' ',vo.name)+1, 100)

在我们的数据库中,我们有一个name列,我试图使用|或空格分隔符来选择first和last。现在,我们的代码适用于空间名称,但我需要将其拆分为任意一个

表.name
first-last
first2 | last2

select substr(upper(mid(vo.name, 1, locate(' ',vo.name)-1)),1,20) as 'First Name',
       substr(upper(mid(vo.name, locate(' ',vo.name)+1, 100)),1,20) as 'Last Name'
from table vo

有什么方法可以查找其中一种吗?

我最终使用了一个嵌套的replace()函数来内联调整数据大小,但我觉得可能有更干净的方法

    SELECT
      UPPER(SUBSTRING(vo.name, 1, LOCATE(' ', REPLACE(vo.name, '|', ' ')) - 1)) as 'First Name',
      UPPER(SUBSTRING(vo.name, LOCATE(' ', REPLACE(vo.name, '|', ' ')) + 1)) as 'Last Name'
from table vo
这是假设只有一个“|”或“”-否则,这可能会起作用:

SELECT LEFT('FirstName |LastName', CHARINDEX (',', REPLACE(REPLACE(REPLACE('FirstName |LastName', ' ', ','), '|', ','), ',,', ','))-1)

首先,试着去担心名字和姓氏是徒劳的。随着时间的推移,我发现有太多不同的名称变体,我通常只提供一个名称字段,让人们以自由形式输入数据。这就是说,如果您坚持使用名/姓约定,为什么不先将数据清理成一种格式,然后开始强制数据输入仅以该格式执行?我无法控制实际修复问题,即清理数据并强制执行正确的数据输入。我需要以最早和最晚的格式将此数据交付给供应商。相信我,这不是我的第一选择。
SELECT LEFT('FirstName |LastName', CHARINDEX (',', REPLACE(REPLACE(REPLACE('FirstName |LastName', ' ', ','), '|', ','), ',,', ','))-1)