我正在使用 MS SQL Server 2014 SP3。
我有一個名為的列person_loader,其中包含一個大字串。我無法控制它,因為它來自第 3 方系統。
樣本資料:
1. Bob Smith, 01/01/1980, "email: [email protected], mobile: 012345687",USA, Joiner, 05/04/2022
2. Dolly Smith, 02/03/1978, "email: [email protected]", UK, Singer,
3. Dave Smith, 09/08/78,"mobile: 98745632", USA, Unemployed, 04/04/2022
4. Bud Smith, 07/07/80,"email:[email protected], mobile: 0147852369", UK, Dr,
我想提取倒數第??二個和最后一個','之間的字串。結果如下:
1. Joiner
2. Singer
3. Unemployed
4. Dr
有時字串不會以日期結尾,但總會有一個逗號。
我可以提取最后一個逗號的所有內容,但是我該如何構建呢?
SELECT RIGHT([person_loader], CHARINDEX(',', REVERSE([person_loader])) - 1)
FROM tblCustomer;
uj5u.com熱心網友回復:
在較新(和受支持)的 SQL Server 版本中,使用OPENJSON. 在舊的、不受支持的版本中,您會遇到丑陋的字串決議……這不是 SQL Server 的強項之一。
;WITH level1 AS
(
SELECT pl = SUBSTRING
(
person_loader,
1,
LEN(person_loader) - CHARINDEX(',', REVERSE(person_loader))
)
FROM dbo.tblCustomer
)
SELECT LTRIM(RIGHT(pl, CHARINDEX(',', REVERSE(pl))-1)) FROM level1;
輸出:
| (無列名) |
|---|
| 細木工 |
| 歌手 |
| 失業者 |
| 博士 |
- 示例db<>fiddle
當然,如果表中有帶一個或零個逗號的字串,這將失敗。NULL您可以使用一堆額外的(甚至更丑陋的)處理來處理這個(以及空字串和) COALESCE(NULLIF(:
;WITH level1 AS
(
SELECT pl = SUBSTRING
(
person_loader,
1,
LEN(person_loader)
- COALESCE(NULLIF(CHARINDEX(',',
REVERSE(person_loader)),0),0)
)
FROM dbo.tblCustomer
)
SELECT COALESCE(LTRIM(RIGHT(pl,
COALESCE(NULLIF(CHARINDEX(',',
REVERSE(pl)), 0),1)-1)), '')
FROM level1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/455690.html
