我有桌子:
id | name
1 | a,b,c
2 | b
Run Code Online (Sandbox Code Playgroud)
我想要像这样的输出:
id | name
1 | a
1 | b
1 | c
2 | b
Run Code Online (Sandbox Code Playgroud) 我有一个以逗号分隔数据的列:
1,2,3
3,2,1
4,5,6
5,5,5
Run Code Online (Sandbox Code Playgroud)
我正在尝试运行搜索,以单独查询CSV字符串的每个值.
0<first<5 and 1<second<3 and 2<third<4
Run Code Online (Sandbox Code Playgroud)
我知道我可以返回所有查询并自行拆分并自己进行比较.我很好奇是否有办法这样做,所以mysql做了处理工作.谢谢!
我有一个包含多个值的非正常字段,因为它是Xml数据,直到现在才打算查询.MySQL能否将此xml列拆分为多行?
表
NameA | <Xml><Values<Value>1</Value><Value>2</Value><Value>3</Value></Values></Xml>
NameB | <Xml><Values<Value>1</Value><Value>2</Value></Values></Xml>
NameC | <Xml><Values<Value>1</Value><Value>2</Value><Value>3</Value><Value>4</Value></Values></Xml>
Run Code Online (Sandbox Code Playgroud)
我想要
NameA | 1
NameA | 2
NameA | 3
NameB | 1
Run Code Online (Sandbox Code Playgroud)
像这样的MSSQL/TSQL解决方案
SELECT
I.Name,
Value.value('.','VARCHAR(30)') AS Value
FROM
Item AS I
CROSS APPLY
Xml.nodes('/Xml/Values/Value') AS T(Value)
WHERE
I.TypeID = 'A'
Run Code Online (Sandbox Code Playgroud)
但在MySQL中,我只能得到
NameA | 123
NameB | 12
NameC | 1234
Run Code Online (Sandbox Code Playgroud)
同
SELECT
I.`Name`,
ExtractValue(Xml,'/Xml/Values/Value') AS ListOfValues
FROM
Item AS I
WHERE
I.TypeID = 'A'
;
Run Code Online (Sandbox Code Playgroud)
有什么优雅的方法可以在MySQL中拆分xml吗?
一些外部数据供应商想要给我一个数据字段 - 管道分隔的字符串值,我发现这很难处理。
如果没有应用程序编程语言的帮助,有没有办法将字符串值转换为行?
然而存在一个困难,该字段具有未知数量的分隔元素。
有问题的数据库引擎是 MySQL。
例如:
Input: Tuple(1, "a|b|c")
Output:
Tuple(1, "a")
Tuple(1, "b")
Tuple(1, "c")
Run Code Online (Sandbox Code Playgroud)