如何使用格式获取这些字段之间的值?

时间:2018-12-05 18:23:49

标签: mysql

我正在执行数据库迁移,我需要将数据从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 1Value 2Value 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

1 个答案:

答案 0 :(得分:0)

我必须通过以下方式处理这种情况

借助case when,首先,我使用locate函数确定格式的类型,一旦借助substring_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进行测试

在这种情况下,此answer很有用