1

我有一种情况,我正在解析一个 varchar 值以提取数字,我必须更新我的表以将数值放入表中的一个新字段中。我已将字符串解析封装到存储过程中。现在我正在尝试编写更新语句。

我的表看起来像这样(简化为仅显示键值):

CREATE TABLE dbo.oper_pacer
(
oper_pacer_id                 int         NOT NULL,
oper_pacer_fluroscopy         varchar(20) NULL,
oper_pacer_fluoro_min         float       NULL
)

我的函数接受一个 varchar(20) 值并返回一个浮点数,对数字进行解析和转换:

CREATE FUNCTION usf_ParseFluoro( 
@parm1 VARCHAR(20)
)
RETURNS FLOAT
AS
BEGIN
    DECLARE @value VARCHAR(20)
    DECLARE @midVal VARCHAR(20)
    DECLARE @nPos INT
    DECLARE @lPos INT

SELECT @midVal = SUBSTRING(@parm1, PATINDEX('%[0-9]%', @parm1), PATINDEX('%[0-9]%',@parm1) + LEN(@parm1)+1)

SELECT @value = 
    (CASE 
        WHEN PATINDEX('%[a-z]%', @midVal) = 0
            THEN @midVal
        ELSE RTRIM(SUBSTRING(@midVal, 1, PATINDEX('%[a-z]%', @midVal)-1))
    END)

    RETURN CONVERT(FLOAT, @value)
END

这是我的问题:

鉴于在 T-SQL 中无法为每个循环执行一次,我该如何编写原始表的更新、循环、调用函数并将返回值放入 oper_pacer_fluoro_min?

编辑: 一旦我创建了函数,更新就非常简单了,只是经过了一些试验和错误:我需要放入 dbo. 函数的前缀以使其以我当前的数据库权限运行:

UPDATE oper_pacer SET oper_pacer_fluoro_min = dbo.usf_ParseFluoro(oper_pacer_fluroscopy)
4

1 回答 1

2

我不认为你可以使用程序来做到这一点。我使用一个函数解决了一个类似的问题,我认为它也对你有用。您可能需要重组您的表(即使它位于临时表中),以便您拥有该函数可用的所有必要数据元素。但是一旦你这样做了,你的 UPDATE 语句就是对输入字段的函数调用。

于 2012-09-18T17:47:49.463 回答