我有一个行数据
对于每一行,我想获取tkID的值,即查询应该返回245764,如何在SQL Server中执行此操作?另一个字符串将始终保持不变,只有tkID会有所不同。
我试过SELECT * FROM PERSON WHERE SUBSTRING(1,)...
请帮忙
Table
SAMPLE DATA
PERSON
ID TEXT
1 <com.innovation.jsp.beans.structTaskContext
obj-name="tkDetails" descriptionKey="B.Tk.Undefined"
tkID="245764" abc="1"....
2 <com.innovation.jsp.beans.structTaskContext
obj-name="tkDetails" descriptionKey="B.Tk.Undefined"
tkID="245765" abc="2".....
输出应为:
ID tkID
1 245764
2 245765
谢谢,
艾登
答案 0 :(得分:1)
您可以结合使用PATINDEX
,CHARINDEX
,RIGHT
和LEFT
字符串函数来实现此目的。
<强>查询强>
select left((right(@str, len(@str) - patindex('%tkID="%', @str) - 5)),
charindex('"',
(right(@str, len(@str) - patindex('%tkID="%', @str) - 5)), 1) - 1);
答案 1 :(得分:1)
create table #b
(
ID int, TEXT varchar(max)
)
insert into #b values
(1,'<com.innovation.jsp.beans.structTaskContext
obj-name="tkDetails" descriptionKey="B.Tk.Undefined"
tkID="245764" abc="1"....'),
(2,'<com.innovation.jsp.beans.structTaskContext
obj-name="tkDetails" descriptionKey="B.Tk.Undefined"
tkID="245765" abc="2".....')
SELECT SUBSTRING(text, PATINDEX('%[0-9]%', text), PATINDEX('%[0-9][^0-9]%', text + 't') - PATINDEX('%[0-9]%',
text) + 1) AS Number from #b
输出
Number
245764
245765
答案 2 :(得分:1)
试试这个。
declare @text nvarchar(1000)='<com.innovation.jsp.beans.structTaskContext
obj-name="tkDetails" descriptionKey="B.Tk.Undefined"
tkID="245765" abc="2".....'
如果以上格式对所有记录都相同
select substring(@text, charindex('tkID=', @text)+6,charindex('abc=', @text)-(charindex('tkID=', @text)+8))
如果tckId长度为6
select substring(@text, charindex('tkID=', @text)+6,6)