根据分隔的字符串项返回值



在TSQL中,数据库记录中的字符串是'A/A/A'或'A/B/A'(示例)。我想解析字符串,并为第一个实例返回'1';在第二个实例中,返回'2'。也就是说,如果分隔符之间的所有值都相同,则返回一个值;否则返回另一个值。最好的方法是什么?

有点盲目的回答:

  1. 读取变量的整个值。读取另一个中的第一个值部分:

    声明@整个nvarchar(max), @单个nvarchar(max)

    选择/设置@entire =…

    设置@single =左(@entire charindex ('/', @entire) 1)

  2. 删除斜杠后比较整个和@single复制:

    设置@entire = (@entire替换 ,'/','')

    select case when replication (@single,len(@ whole)/len(@single))=@ whole

    then 1 else 0 end as [What you want]

应该这样做:

SELECT
x.*,
CASE
WHEN N > 1 THEN 0
ELSE 1
END Result
FROM (
SELECT 
t.Column1,
t.Column2,
t.Column3,
t.SomeColumn,
COUNT(DISTINCT s.value) N
FROM dbo.YourTable t
OUTER APPLY STRING_SPLIT(t.SomeColumn,'/') s
GROUP BY 
t.Column1,
t.Column2,
t.Column3,
t.SomeColumn
) x
;

根据您的简单示例(没有考虑边缘情况),以下内容应该适用于您:

select string, iif(replace(s,v,'')='',1,0) as Result
from t
cross apply (
values(left(string,charindex('/', string)-1),(replace(string,'/','')))
)s(v,s);

例子小提琴

最新更新