Sql 仅在特殊字符串之前选择字符串

Sql 仅在特殊字符串之前选择字符串,sql,sql-server,Sql,Sql Server,这是我在表1中的数据列1 “错误列表”:“017519033:815,,“错误代码”:“139” “错误列表”:“0115101233:815,,“错误代码”:“139” “错误列表”:“01815081233:805,,“错误代码”:“19” “错误列表”:“018995081233:805,,“错误代码”:“815” 我想选择在“:”之后包含815的数据 知道怎么做吗 我的预期产出: “错误列表”:“017519033:815,,“错误代码”:“139” “错误列表”:“0115101

这是我在表1中的数据列1

  • “错误列表”:“017519033:815,,“错误代码”:“139”

  • “错误列表”:“0115101233:815,,“错误代码”:“139”

  • “错误列表”:“01815081233:805,,“错误代码”:“19”

  • “错误列表”:“018995081233:805,,“错误代码”:“815”

我想选择在“:”之后包含815的数据 知道怎么做吗

我的预期产出:

  • “错误列表”:“017519033:815,,“错误代码”:“139”

  • “错误列表”:“0115101233:815,,“错误代码”:“139”

以下内容如何

select * from table1 where column1 like 'errorList":"%:815%'

您可以使用
Like
CharIndex

SELECT * FROM yourTable WHERE column1 LIKE '%:815%'

这应该起作用:

select * from mytable where column1 like '%:815,%'

另一种使用XML进行字符串拆分的解决方案:

DECLARE @tbl TABLE(YourString VARCHAR(100));
INSERT INTO @tbl VALUES
 ('"errorList":"017519033:815,","errorCode":"139"')
,('"errorList":"0115101233:815,","errorCode":"139"')
,('"errorList":"01815081233:805,","errorCode":"19"')
,('"errorList":"018995081233:805,","errorCode":"815"');


SELECT *
FROM @tbl 
WHERE LEFT(CAST('<x>' + REPLACE(YourString,':','</x><x>') + '</x>' AS XML).value('(/x)[3]','nvarchar(max)'),3)='815'
这是Veeerry类似于。。。作业问题?如果是的话,使用我的工作平台是不公平的!
select * from your_table 
where 
right(errorList, len(errorlist) - charindex(':', errorlist)) = 815
DECLARE @tbl TABLE(YourString VARCHAR(100));
INSERT INTO @tbl VALUES
 ('"errorList":"017519033:815,","errorCode":"139"')
,('"errorList":"0115101233:815,","errorCode":"139"')
,('"errorList":"01815081233:805,","errorCode":"19"')
,('"errorList":"018995081233:805,","errorCode":"815"');


SELECT *
FROM @tbl 
WHERE LEFT(CAST('<x>' + REPLACE(YourString,':','</x><x>') + '</x>' AS XML).value('(/x)[3]','nvarchar(max)'),3)='815'
DECLARE @tbl TABLE(ID INT IDENTITY,YourString VARCHAR(100));
INSERT INTO @tbl VALUES
 ('"errorList":"017519033:815,","errorCode":"139"')
,('"errorList":"0115101233:815,","errorCode":"139"')
,('"errorList":"01815081233:805,","errorCode":"19"')
,('"errorList":"018995081233:805,","errorCode":"815"');

WITH Casted AS
(
    SELECT ID
          ,YourString
          ,CAST('<x>' + REPLACE(REPLACE(YourString,'"',''),':','</x><x>') + '</x>' AS XML) AS TheXml
    FROM @tbl
)
SELECT TheXml.value('(/x/text())[1]','nvarchar(max)') AS Part1
      ,TheXml.value('(/x/text())[2]','nvarchar(max)') AS Part2
      --,TheXml.value('(/x/text())[3]','nvarchar(max)') AS Part3
      ,Part3a AS Part3
      ,Part3b AS Part4
      ,TheXml.value('(/x/text())[4]','nvarchar(max)') AS Part5
FROM Casted
CROSS APPLY(SELECT TheXml.value('(/x/text())[3]','nvarchar(max)') AS Part3
                  ,CHARINDEX(',',TheXml.value('(/x/text())[3]','nvarchar(max)')) AS PosComma) AS A
CROSS APPLY(SELECT LEFT(Part3,A.PosComma-1) AS Part3a
                  ,SUBSTRING(Part3,A.PosComma+2,1000) AS Part3b) AS B
Part1       Part2           Part3   Part4       Part5
errorList   017519033       815     errorCode   139
errorList   0115101233      815     errorCode   139
errorList   01815081233     805     errorCode   19
errorList   018995081233    805     errorCode   815
select * from table1 where PATINDEX('%:815%',column1)>1