SQL Server 中列的单个数据中的数字后跟管道符号的计数

问题描述

LEN(Column)-len(Replace(Column,'|','') 将给出 sql Server 的单行数据中可用的管道总数。

但是我需要计算紧跟在 Number 后面的 Pipe Symbol 的记录数,

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

以上记录的输出2

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

输出0

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

输出1

根据建议的答案更新我的问题:

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

输出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 '%|%'

预期输出:

MNY-YU-1234 - 0