如何获得变量的价值?

时间:2016-11-18 10:23:01

标签: sql sql-server

我有一个行数据

对于每一行,我想获取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

谢谢,

艾登

3 个答案:

答案 0 :(得分:1)

您可以结合使用PATINDEXCHARINDEXRIGHTLEFT字符串函数来实现此目的。

<强>查询

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)