头!
在我的数据库中,我有一列包含以下数据(示例):
H-01-01-02-01
BLE-01-03-01
H-02-05-1.1-03
任务是获取数组的倒数第二个元素(如果您使用“-”字符拆分数组)。字符串的长度不同。
这就是使用上述数据的结果:
02
03
1.1
基本上,我正在寻找与以下 ruby 语句等效的内容,以便在 SQL-Server 中的 Select-Statement 中使用:
"BLE-01-03-01".split("-")[-2]
这在 SQL Server 中是否可行?在花了一些时间寻找解决方案后,我只找到了适用于最后一个或第一个元素的解决方案。
非常感谢您提供任何线索或解决方案!
PS:SQL Server版本为Microsoft SQL Server 2012
最佳答案
作为替代方案,您可以尝试以下方法:.
--带有一些测试数据的模型表来模拟您的问题
DECLARE @mockupTable TABLE (ID INT IDENTITY, YourColumn VARCHAR(50));
INSERT INTO @mockupTable VALUES
('H-01-01-02-01')
,('BLE-01-03-01')
,('H-02-05-1.1-03');
--查询
SELECT CastedToXml.value('/x[sql:column("CountOfFragments")-1][1]','nvarchar(10)') AS TheWantedFragment
FROM @mockupTable t
CROSS APPLY(SELECT CAST('<x>' + REPLACE(t.YourColumn,'-','</x><x>') + '</x>' AS XML))A(CastedToXml)
CROSS APPLY(SELECT CastedToXml.value('count(/x)','int')) B(CountOfFragments);
简单的想法:
第一个 APPLY
会将字符串转换为这样的 XML
<x>H</x>
<x>01</x>
<x>01</x>
<x>02</x>
<x>01</x>
第二个APPLY
将对此XML进行x查询以获取片段的计数。由于 APPLY
会将其作为一列添加到结果集中,因此我们可以使用 sql:column()
使用该值通过其位置获取所需的片段。
关于sql-server - 使用分隔符将字符串拆分为数组,获取 SELECT 语句中倒数第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520380/