我正在执行数据库迁移,我需要将数据从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
答案 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很有用