簡體   English   中英

SQL 服務器中一列的單個數據中后跟 pipe 符號的數字計數

[英]Count of numbers followed by pipe symbol in a single data of a column in SQL Server

LEN(Column)-len(Replace(Column,'|','')將給出 SQL 服務器的單行數據中可用的 Pipe 的總數。

但我需要計算有 Pipe 符號緊跟數字的記錄數,

**Eg 1:** MNY-THY-**2|** *YUI_WER-NA|JIU-ERT-**8|***

上述記錄的 output 為2

**Eg 2:** *MNY-YU-NA|*

output 為0

**Eg 3:** *MNY-9876**5|***

output 為1

根據建議的答案更新我的問題:

**Eg 4:** MNY-YU-1234

output 為0因為沒有“|” 在我的示例 4 中,結果應僅為 0。

任何建議都會得到高度支持。

如果您使用 SQL Server 2016+,則STRING_SPLIT()是一個選項:

桌子:

SELECT *
INTO Data
FROM (VALUES
   ('MNY-THY-2| YUI_WER-NA|JIU-ERT-8|'),
   ('MNY-YU-NA|'),
   ('MNY-98765|'),
   ('FGL_NU_0003')
) v (TextData)

陳述:

SELECT *
FROM Data d
OUTER APPLY (
   SELECT COUNT(*) AS NumberCount
   FROM STRING_SPLIT(d.TextData, '|') s
   WHERE (d.TextData LIKE '%|%') AND (RIGHT(s.[value], 1) LIKE '[0-9]')
) a

結果:

TextData                         NumberCount
MNY-THY-2| YUI_WER-NA|JIU-ERT-8| 2
MNY-YU-NA|                       0
MNY-98765|                       1
FGL_NU_0003                      0

您可以根據“|”拆分字符串並檢查右側的值是否包含數字。

DECLARE @tosearch VARCHAR(MAX)='%[0-9]|%' ,@string VARCHAR(MAX)='FGL_NU_0003'

SELECT COUNT(CASE WHEN RIGHT(VALUE,1) LIKE '[0-9]' THEN 1 ELSE NULL END) 
FROM STRING_SPLIT(@string,'|')
WHERE @string LIKE '%|%'

預期 Output:

MNY-YU-1234 - 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM