t t - sql: Count表达式前分号的个数

  • 本文关键字:表达式 sql Count sql t-sql
  • 更新时间 :
  • 英文 :


我得到了一个字符串表,看起来像这样:9; 1;测试;;11002年我怎么数A前面有多少个分号呢?

干杯!

使用字符串函数

select len(left(str,charindex(str,'A')) - len(replace(left(str,charindex(str,'A'), ';', '')) n
from tbl 

提示:整个问题有一些气味…您不应该将数据存储为CSV字符串。但有时我们必须利用我们拥有的……
提示2:下面需要SQL-Server v2016。对于旧版本,我们需要基于XML做类似的事情。

试试这个:

——一个声明的表来模拟你的问题

DECLARE @tbl TABLE(ID INT IDENTITY, YourCSVstring VARCHAR(100));
INSERT INTO @tbl(YourCSVstring) 
VALUES('9;1;test;A;11002');

——查询

SELECT t.ID
,A.*
FROM @tbl t
CROSS APPLY OPENJSON(CONCAT(N'["',REPLACE(t.YourCSVstring,';','","'),N'"]')) A;

简而言之:

  • 我们使用一些替换将你的csv字符串转换为JSON数组。
  • 现在我们可以使用useOPENJSON()来读取。
  • value为数组项,key从零开始的索引。
  • 按你需要的方式进行。

只是给您一些乐趣:您可以轻松地将CSV类型安全的读取为列,只需将[[加倍并使用WITH指定列:

SELECT t.ID
,A.*
FROM @tbl t
CROSS APPLY OPENJSON(CONCAT(N'[["',REPLACE(t.YourCSVstring,';','","'),N'"]]')) 
WITH(FirstNumber  INT           '$[0]'
,SecondNumber INT           '$[1]'
,SomeText     NVARCHAR(100) '$[2]'
,YourLetterA  NVARCHAR(100) '$[3]'
,FinalNumber  INT           '$[4]')A

的回报:

ID  FirstNumber SecondNumber    SomeText    YourLetterA FinalNumber
1   9           1               test        A           11002

相关内容

  • 没有找到相关文章

最新更新