我想解析 value
列并生成 output
列。问题是我需要从右边开始解析输出。如何解析重复的字符?
| value | output |
|--------------------------------|-----------|
| ABC - DEF - 0100 - 0100 - 0100 | ABC - DEF |
| GHIJ KLM - 0100 - 0100 - 0100 | GHIJ KLM |
| NOPQR - 0100 - 0100 - 0100 | NOPQR |
| STU-VWXYZ - 0100 - 0100 - 0100 | STU-VWXYZ |
| ABD | ABD |
CREATE TABLE #CHAR (value VARCHAR(MAX), output VARCHAR(MAX))
INSERT INTO #CHAR VALUES
('ABC - DEF - 0100 - 0100 - 0100', 'ABC - DEF')
,('GHIJ KLM - 0100 - 0100 - 0100', 'GHIJ KLM')
,('NOPQR - 0100 - 0100 - 0100', 'NOPQR')
,('STU-VWXYZ - 0100 - 0100 - 0100', 'STU-VWXYZ')
,('ABD', 'ABD')
SELECT * FROM #CHAR
接受的答案
SELECT t.*,
CASE WHEN t.value LIKE '%-%' THEN LEFT(value, PATINDEX('% - [0-9]%', value))
ELSE t.value
END
FROM #CHAR t
答案 0 :(得分:2)
在 SQL Server 中,您可以使用 LEFT()
和 PATINDEX()
:
select t.*,
left(value, patindex('% - [0-9]%', value))
from t;
Here 是一个 db<>fiddle。