Sql 仅在特殊字符串之前选择字符串
这是我在表1中的数据列1Sql 仅在特殊字符串之前选择字符串,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
- “错误列表”:“017519033:815,,“错误代码”:“139”
- “错误列表”:“0115101233:815,,“错误代码”:“139”
- “错误列表”:“01815081233:805,,“错误代码”:“19”
- “错误列表”:“018995081233:805,,“错误代码”:“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