求助:SQL Server 12中拆分列并提取第三段分隔值的SELECT语句
解决方案
由于SQL Server 12(即SQL Server 2014)并不支持STRING_SPLIT函数(该函数从SQL Server 2016开始引入),且即便在支持的版本中,STRING_SPLIT返回的是行集而非直接提取指定位置的元素,因此可以通过以下两种传统字符串函数的方法实现需求:
方法一:使用CHARINDEX与SUBSTRING嵌套
通过定位两个冒号的位置,提取中间的目标子串:
SELECT SUBSTRING( foo, CHARINDEX(':', foo) + 1, CHARINDEX(':', foo, CHARINDEX(':', foo) + 1) - CHARINDEX(':', foo) - 1 ) AS target_value FROM myDB.dbo.my_table;
方法二:使用REPLACE结合PARSENAME
利用PARSENAME按点分割字符串的特性,先将冒号替换为点,再提取倒数第二部分:
SELECT PARSENAME(REPLACE(foo, ':', '.'), 2) AS target_value FROM myDB.dbo.my_table;
两种方法都能准确提取foo列中两个冒号之间的内容(即示例中的1234和5678),其中方法二代码更简洁,适合格式固定的场景。
内容的提问来源于stack exchange,提问作者cristiandatum
相关产品推荐
相关产品推荐

