首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL解析字符串并执行操作

T-SQL解析字符串并执行操作
EN

Stack Overflow用户
提问于 2011-06-30 03:58:16
回答 2查看 309关注 0票数 0

我正在探索基于字符串输入动态计算值的方法。以下面的字符串输入为例。

代码语言:javascript
复制
"(32+35)/(12+34)"

数字32、35、12和34是ID的“占位符”。在口语中,我想要做的事情如下。获取ID为32的指标,并对其应用一些返回值的函数。然后将该值与应用于度量id35的相同函数返回的值相加,依此类推。

代码语言:javascript
复制
(dbo.foo(32) + dbo.foo(35)) / (dbo.foo(12) + dbo.foo(34))

从一个简单的加法字符串开始,然后接受其他运算符(-,/,*)可能会更容易。

这在tsql中是可能的吗?打开regex选项(有一个regex tsql函数)和任何你能想到的东西。

也许对整数进行正则表达式替换以将函数名插入到字符串中,然后对字符串执行exec()以获得结果?

让我们不要争论这种方法的优缺点……我知道这不是一个真正的“数据库”解决方案,但我想更多地探索它。

EN

回答 2

Stack Overflow用户

发布于 2011-06-30 04:15:08

我能够使用我提到的regex选项将其作为概念验证。

代码语言:javascript
复制
    declare @str as nvarchar(1000)
    declare @regex as nvarchar(1000)

    set @str = '(32+33)/(12+93)'
    set @regex = 'select ' + dbo.regex_replace('\d+','dbo.foo($&)', @str, 1, 0)

    exec(@regex)

我的regex_replace函数接受参数(@pattern、@replacement、@subject、@global、@multiline)。我是通过谷歌找到这个功能的。如果你在搜索,我相信它是"RegexReplace“。

这段代码提供了我正在寻找的答案。

票数 2
EN

Stack Overflow用户

发布于 2011-06-30 04:33:19

RegEx相当优雅。但部分原因是不是每个人都有RegEx可用,部分原因是我已经投入了所有的工作,这里是一个直接的T-SQL解决方案(不是最健壮和可怕的变量名,但它可以完成工作)。请注意,它假定为整数-如果您在其中添加小数,则还必须检查这些小数。

代码语言:javascript
复制
DECLARE 
    @foo NVARCHAR(MAX) = N'(32+35)/(12+34)', 
    @bar NVARCHAR(MAX) = N'';

DECLARE 
    @i INT = 0, 
    @z INT = LEN(@foo), 
    @y INT, 
    @s NVARCHAR(12),
    @s2 NVARCHAR(12);

WHILE @i <= @z
BEGIN
    SET @s = SUBSTRING(@foo, @i, 1);
    IF ASCII(@s) BETWEEN 48 AND 57
    BEGIN
        SET @bar += 'dbo.foo(';
        SET @y = @i + 1;
        WHILE @y <= @z
        BEGIN
            SET @s2 = SUBSTRING(@foo, @y, 1);
            IF ASCII(@s2) BETWEEN 48 AND 57
            BEGIN
                SET @s += @s2;
                SET @y += 1;
            END
            ELSE
            BEGIN
                BREAK
            END
        END
        SET @s += ')';
        SET @i = @y - 1;
    END
    SET @bar += @s;
    SET @i += 1;
END

PRINT @bar;

--EXEC('SELECT ' + @bar);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6526487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档