【问题标题】:TSQL varchar string manipulationTSQL varchar 字符串操作
【发布时间】:2009-04-03 03:22:09
【问题描述】:

我有一个包含以下字符串的变量:AL,CA,TN,VA,NY

我无法控制我在该变量中获得的内容(来自报告服务)

我需要让它看起来像这样:'AL','CA','TN','VA','NY'

我该怎么做?

【问题讨论】:

    标签: tsql string-substitution


    【解决方案1】:
    declare @x varchar(50) = 'AL,CA,TN,VA,NY'
    
    select '''' + REPLACE(@x, ',', ''',''') + ''''
    

    【讨论】:

      【解决方案2】:

      我最终做了一些我认为我会发布的非常相似的事情。 (不过,我要感谢 Mitch)

      这照顾了中间:

      SET @StateList = REPLACE(@StateList, ',', ''',''')

      然后引用边缘:

      SET @WhereClause1 = @WhereClause1 + 'AND customerState IN (''' + @StateList + ''')'

      【讨论】:

        【解决方案3】:

        对于更通用的答案,当您不知道您的输出究竟是什么样子时,请使用regular expressions

        这可以让您匹配 [A-Z]{2} 之类的内容并将其替换为 '$&'。

        一位评论者建议这对这项任务来说太过分了 - 同意,如果你能保证你总是会得到这样的字符串。但是,其他人稍后会发现这些问题页面存在类似但不准确的问题,因此拥有其他选项会有所帮助。

        【讨论】:

        • 正则表达式对于这个任务来说太过分了。
        • 这就是为什么我说“对于更通用的答案,当你不知道你的输出会是什么样子时”。其他人发现这些页面存在类似但不准确的问题,因此其他意见很有帮助。
        【解决方案4】:

        不要为动态 sql 操心。

        您需要将字符串转换为表格 所以 A,B,C,D

        变成

        价值 一种 乙 C D

        使用类似的函数 http://www.sqlusa.com/bestpractices/training/scripts/splitcommadelimited/

        然后你可以使用 CROSS APPLY(这就像加入一个表,但是一个由函数创建的表),或者你可以将它放在一个表变量中并加入到该变量中

        【讨论】:

          【解决方案5】:

          我想知道下面的脚本是在 SQL 中运行而不是在 T-SQL 中运行


          声明@tblName varchar(30) SET @tblName = CONVERT(VARCHAR(20),GETDATE(),112) + '表'

          声明@sql nvarchar(4000) 选择@sql = '创建表“' + @tblName + '” ( ID VARCHAR(15), 名称 VARCHAR(15) )'

          执行(@sql)

          它会给你错误

          消息 170,Sev 15:第 1 行:“20090714Table”附近的语法不正确。 [SQLSTATE 42000]

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-12
            • 1970-01-01
            • 1970-01-01
            • 2015-07-05
            相关资源
            最近更新 更多