【问题标题】:SQL Server 2005 - how can I select a specific part of a string?SQL Server 2005 - 如何选择字符串的特定部分?
【发布时间】:2018-05-28 10:49:17
【问题描述】:

我有字符串 &string=45646874&v1=67&v2=test 并且我想从中获取字符串 45646874 有时这个提取会有 8 字符有时 7 有时 5 等等。

所以我需要在 &string=45646874&v1=67&v2=test 中搜索并获取 string= 之后和下一个 & 之前的所有内容

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    SQL Server 没有任何内置的正则表达式提取支持,但我们可以使用基本字符串函数来处理这个问题,如下所示:

    WITH cte AS (
        SELECT '&string=45646874&v1=67&v2=test' AS col UNION ALL
        SELECT 'blah blah &string=ABCDEF123&v1=hello&v2=goodbye'
    )
    
    SELECT
        SUBSTRING(col, CHARINDEX('&string=', col) + 8,
                  CHARINDEX('&', col, CHARINDEX('&string=', col) + 1) -
                  CHARINDEX('&string=', col) - 8) AS output
    FROM cte;
    

    Demo

    【讨论】:

    • 嘿,蒂姆,我必须在 Salesforce Marketing Cloud 中进行,这有一些限制,help.marketingcloud.com/en/documentation/automation_studio/…
    • 注意事项 查询活动的 SQL 支持基于 SQL Server 2005 功能。仅对帐户或父帐户中的数据扩展或数据视图的 SELECT 语句 嵌套查询 UNION JOIN GROUP BY 条件语句 IF 构造 CASE 语句 函数 支持大多数函数(即 MIN、MAX) CAST 和 CONVERT 不支持的元素 变量 游标 用户定义的函数事务和锁定 GOTO PRINT 任何 sp_* 存储过程 EXEC 临时表和公用表表达式 TEXT 和 IMAGE 函数
    • 在 SQL Server 2005 上,没有CHARINDEX 支持,除非我们对查询字符串做出假设,否则我不确定是否有解决方案。 &v1 是否总是跟在 &string 参数后面?
    • 我们可以使用charindex,有时我们会有&string=45646874&v1=67&v2=tes,或&string=45646874&v2=tes&v1=67,或&string=45646874&v8=tes&v1=67,但我们总是有string=some numbers&跨度>
    • @FelipeJordani 如果您可以使用CHARINDEX,那么无论查询参数出现在哪里,我的回答都应该适合您。忽略您在上面的 CTE 中看到的 UNION ALL。这仅用于测试目的,因此您可以将我的答案直接剪切并粘贴到 SQL Server 中。
    【解决方案2】:

    你可以试试这个查询

    DECLARE @String varchar(100)= '&string=45646874&v1=67&v2=test'
    SELECT SUBSTRING(@string,(CHARINDEX('string=',@string)+7),(CHARINDEX('&',@string,2)-(CHARINDEX('string=',@string)+7)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多