我有一個如下所示的字串
A1234B1234C1234
我想每 5 個字符取第一個字符。
結果將是
美國廣播公司
字串長度是可變的,因此長度可以是 5、10、20、30 等
uj5u.com熱心網友回復:
假設您使用的是完全受支持的 SQL Server 版本,并且您確實想要獲取每 5 個字符,您可以使用 Tally 并STRING_AGG實作此目的:
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT TOP (8000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
FROM N N1, N N2, N N3, N N4)
SELECT STRING_AGG(SS.C,'') AS NewColumn
FROM (VALUES('A1234B1234C1234'))V(YourColumn)
JOIN Tally T ON LEN(YourColumn) >= T.I
CROSS APPLY (VALUES(SUBSTRING(V.YourColumn,T.I,1)))SS(C)
WHERE (T.I-1) % 5 = 0
GROUP BY V.YourColumn;
但是,如果您實際上只想保留字母字符,我會使用TRANSLATEand REPLACE:
SELECT REPLACE(TRANSLATE(V.YourColumn, '0123456789',REPLICATE('|',LEN('0123456789'))),'|','') AS NewColumn
FROM (VALUES('A1234B1234C1234'))V(YourColumn)
注意,如果值是一個變數,如果使用 Tally 解決方案,我會推薦這種方法:
DECLARE @YourString varchar(8000) = 'A1234B1234C1234';
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT TOP (LEN(@YourString)) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
FROM N N1, N N2, N N3, N N4)
SELECT STRING_AGG(SS.C,'') AS NewColumn
FROM Tally T
CROSS APPLY (VALUES(SUBSTRING(@YourString,T.I,1)))SS(C)
WHERE (T.I-1) % 5 = 0;
uj5u.com熱心網友回復:
試試這個
Create function UDF_ExtractAlphabets
(
@input varchar(255)
)
Returns varchar(255)
As
Begin
Declare @alphabetIndex int = Patindex('%[^a-zA-Z]%', @input)
Begin
While @alphabetIndex > 0
Begin
Set @input = Stuff(@input, @alphabetIndex, 1, '' )
Set @alphabetIndex = Patindex('%[^a-zA-Z]%', @input )
End
End
Return @input
End
SELECT left(dbo.UDF_ExtractAlphabets(yourtext),5) FROM dbo.tablename

uj5u.com熱心網友回復:
SELECT LEFT('yourtext', 5) AS firstFive FROM X;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410555.html
標籤:
