Mut*_*tor 2 sql t-sql sql-server
我有一行数据由行号和字符串组成,由几个句子(不同的数字)组成.我想使用T-SQL拆分列和枢轴(unpivot?)并显示相应的行号和每行中包含字符串的单个句子.注意:每个新句子以大写字母开头,以句点结尾.
我的数据看起来像这样:
Row_num Sting
1 JOHN SMITH walked quickly to his car. MARY waited outside for a ride. BOB JOHNS called is fired to pick him up. TOM was not present.
2 SALLY SMITH arrived at work early on. Dave called in sick. BETTY DOE was on vacation.
Run Code Online (Sandbox Code Playgroud)
我希望能够将每行中的句子分开并最终得到这样的结果:
1 JOHN SMITH walked quickly to his car.
1 MARY waited outside for a ride.
1 BOB JOHNS called is fired to pick him up.
1 TOM was not present.
2 SALLY SMITH arrived at work early on.
2 Dave called in sick.
2 BETTY DOE was on vacation.
Run Code Online (Sandbox Code Playgroud)
是的,你可以使用XML实现你想要的东西:
数据:
CREATE TABLE tab(row_num INT, String NVARCHAR(MAX));
INSERT INTO tab(Row_num, String)
VALUES
(1, N'JOHN SMITH walked quickly to his car. MARY waited outside for a ride. BOB JOHNS called is fired to pick him up. TOM was not present.'),
(2, N'SALLY SMITH arrived at work early on. Dave called in sick. BETTY DOE was on vacation.')
Run Code Online (Sandbox Code Playgroud)
主要查询:
SELECT
row_num
,[sentence] = Split.a.value('.', 'NVARCHAR(1000)')
FROM
(
SELECT
row_num,
[X] = CAST ('<M>' + REPLACE(String, '.', '.</M><M>') + '</M>' AS XML)
FROM tab
) AS A
CROSS APPLY X.nodes ('/M') AS Split(a)
WHERE Split.a.value('.', 'NVARCHAR(1000)') <> '';
Run Code Online (Sandbox Code Playgroud)
要使用自定义正则表达式,您应该使用CLR Table Valued Function
.
归档时间: |
|
查看次数: |
57 次 |
最近记录: |