如何获取值​在这些有格式的字段之间?

b4lqfgs4  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(215)

我正在进行数据库迁移,需要将数据从db1传递到db2。我得到的sql查询结果与此类似。和[:es]或表示语言的格式。

name
------------
<!--:es-->Nombre<!--:--><!--:en-->Name<!--:-->
<!--:es-->Ciudad<!--:--><!--:en-->City<!--:-->
<!--:es-->Pais<!--:--><!--:en-->Country<!--:-->
<!--:es-->Email<!--:--><!--:en-->Email<!--:-->
<!--:es-->Telefono<!--:--><!--:en-->Phone<!--:-->
[:es]Apodo[:en]Nikname[:]
[:es]Tipo[:en]Type[:]
[:es]Categoria[:en]Category[:]
[:es]Distribuidor[:en]Distributor[:]
Value 1
Value 2
Value 3

有些数据带有格式 <!--:es-->Field<!--:es-->... 其他的有格式 [:es]Apodo[:en]Nikname[:] 还有一些没有特殊格式。例如 Value 1 , Value 2 以及 Value 3 .
我只需要名字,没有任何特殊的分隔符。你知道怎么做到吗。
预期结果是

name
------------
Nombre
Ciudad
Pais
Email
Telefono
Apodo
Tipo
Categoria
Distribuidor
Value 1
Value 2
Value 3

更新
我的sql版本是

mysql -V 
mysql  Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using  EditLine wrapper
qncylg1j

qncylg1j1#

我得用下面的方法来处理这个案子
在case-when的帮助下,我首先使用locate函数确定格式的类型,一旦通过substring\u index函数确定了路由,就排除了我不需要的文本,我只得到与我相关的文本

case
    when
        locate('[:]', name) > 0
    then
        substring_index(substring_index(name, '[:es]', -1),'[:en]', 1)
    else
        substring_index(substring_index(name, '<!--:es-->', -1),'<!--:-->', 1)
end names

我添加了一个sqlfiddle来测试
这个答案在这种情况下很有用

相关问题