我有以下字符串'Custom Code changed from (JA) to (JC)'
。
我想将JA
提取到column
,将JC
提取到另一个。
我已设法使用
获得第一个括号 SUBSTRING(Call_Note_Note, CHARINDEX('(', Call_Note_Note + '(') + 1,
CHARINDEX(')', Call_Note_Note + '()') - CHARINDEX('(', Call_Note_Note + '(') - 1) as 'first'
我无法弄清楚如何使用simular查询来提取第二部分?
任何帮助都会很棒!
附加 一个支架可以有两种格式,另一种支架可以有两种,见下文。
Custom Code (POO) Added
Custom Code changed from (POO) to (JA)
阿隆
答案 0 :(得分:0)
假设它总是只有两个代码。
以下是使用REVERSE()功能执行此操作的方法。这将返回第一个和最后一个:
DECLARE @String VARCHAR(100) = 'Custom Code changed from (JA) to (JC)'
SELECT SUBSTRING(@String, CHARINDEX('(', @String + '(') + 1,CHARINDEX(')', @String + '()') - CHARINDEX('(', @String + '(') - 1) as 'first',
REVERSE(SUBSTRING(REVERSE(@String), CHARINDEX(')', REVERSE(@String) + '(') + 1, CHARINDEX('(', REVERSE(@String) + ')(') - CHARINDEX(')', REVERSE(@String) + ')') - 1)) as 'Second'
结果:
答案 1 :(得分:0)
另一种方式是(更易读)
DECLARE @str VARCHAR(max)='Custom Code changed from (JA) to (JC)';
WITH cte
AS (SELECT @str AS string)
SELECT Substring(string, fst + 1, scd - fst - 1) as first_val,
Substring(string, trd + 1, fou - trd - 1) as second_val
FROM cte
CROSS apply (VALUES (Charindex('(', string))) cs (fst)
CROSS apply (VALUES (Charindex(')', string, fst + 1))) cs1 (scd)
CROSS apply (VALUES (Charindex('(', string, scd + 1))) cs2 (trd)
CROSS apply (VALUES (Charindex(')', string, trd + 1))) cs3 (fou)
<强>结果:强>
╔═══════════╦════════════╗
║ first_val ║ second_val ║
╠═══════════╬════════════╣
║ JA ║ JC ║
╚═══════════╩════════════╝