SQL SUBSTRING 提取列的所有部分

SQL SUBSTRING to extract all parts of a column

我正在尝试使用 SQL SUBSTRING 方法从列中提取值。列中的值采用以下格式:VI_{13446F4A-DAC2-44AD-BDAB-86E6F2546DE6}_20220122T090159。 我正在尝试获取由 _ 字符分隔的所有子字符串。 我设法提取了第一部分,但我没有找到其他人使用的方法:

DECLARE @Str nchar(200);
SET @Str = 'VI_{13446F4A-DAC2-44AD-BDAB-86E6F2546DE6}_20220122T090159'

SELECT SUBSTRING(@Str, 1, CHARINDEX('_', @Str) -1) AS F1,
       SUBSTRING(@Str, CHARINDEX('_', @Str)+1, LEN(@Str)) AS F2

上面的代码给我的 F1 正确,但 F2 不正确:

F1 = VI
F2 = {13446F4A-DAC2-44AD-BDAB-86E6F2546DE6}_20220122T090159

如何获得另外两个部分?

谢谢!

如果没有内联.,我想你可以使用PARSENAME

DECLARE @original VARCHAR(255) = 'VI_{13446F4A-DAC2-44AD-BDAB-86E6F2546DE6}_20220122T090159'
DECLARE @new VARCHAR(255) = REPLACE(@original,'_','.')

SELECT PARSENAME(@new,3) as F1,
       PARSENAME(@new,2) as F2,
       PARSENAME(@new,1) as F3