SQL查询解析列并获取每个已解析行的值

时间:2013-05-10 19:09:40

标签: sql sql-server sql-server-2008

enter image description here 您好,

这是在这里发布的基本问题: Previously posted

我有一个表格,其中包含表格名称,其中包含Url,我希望仅使用表单名称。 如图所示:

我创建了一个返回formName

的函数
CREATE FUNCTION [dbo].[getFormName](@p_column varchar(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
declare @FormName varchar(max)
set @FormName = (substring(@p_column,charindex(',',@p_column, 0)+2,50))
RETURN rtrim(@FormName);
END;

GO

我可以通过

获取FormName
  

从myTable

中选择[dbo] .getFormName

这给了我图片中B列的结果,它返回所有表格名称。但是我无法逐行获取每条记录的FormName。上面的子查询返回多个值。如何逐行获取formName?我需要每个FormName的逐行值,因为这将是我与下一个表的连接键。

如果我做错了,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

DECLARE @temp TABLE (col varchar(100))
INSERT INTO @temp( col )
VALUES 
('http://myServer/Lists/myform/DispForm.aspx?ID=6, RAB12EGH234'),
('http://myServer/Lists/myform/DispForm.aspx?ID=5, CBTRR2345')

SELECT FormNameWithUrl = col, FormName = SUBSTRING(col, 
    CASE WHEN CHARINDEX(',', col, 0) = 0 
        THEN 0 
        ELSE CHARINDEX(',', col, 0) + 2 
    END, 50)
FROM @temp

返回:

FormNameWithUrl                                                 FormName
--------------------------------------------------------------- --------------
http://myServer/Lists/myform/DispForm.aspx?ID=6, RAB12EGH234    RAB12EGH234
http://myServer/Lists/myform/DispForm.aspx?ID=5, CBTRR2345      CBTRR2345