【问题标题】:How to extract text between square brackets in TSQL如何在SQL中提取方括号之间的文本
【发布时间】:2018-03-28 08:17:37
【问题描述】:

我有以下疑问:

DECLARE @value as nvarchar(max)
SET @value   = '(company.[department] LIKE ''Development'')';

我想提取括号之间的单词,将其保存在一个值中,然后作为输入放入这样的替换函数中。

select replace(@value, @department, 'another_string');

您可能会说为什么我不立即使用替换功能进行操作。 情况是该部门字符串可能会动态更改为另一个字符串,例如国家/地区,我希望每次都保留此选择并使用值进行更改。

【问题讨论】:

  • 使用 SUBSTRING 和 2 个 CHARINDEX,一个使用 [,另一个使用 ]。

标签: sql-server string tsql replace extract


【解决方案1】:

您可以通过基本字符串函数在查询中执行此操作:

SELECT
    SUBSTRING(col,
              CHARINDEX('[', col) + 1,
              CHARINDEX(']', col) - CHARINDEX('[', col) - 1) AS output
FROM yourTable;

注意事项包括您只有一个括号中的术语,并且此查询形式的答案将可用于您的特定场景。

Demo

【讨论】:

    【解决方案2】:

    您的特殊情况理想地适用于parsenamefunction:

    DECLARE @value as nvarchar(max), @department varchar(100);
    SET @value = '(company.[department] LIKE ''Development'')';
    SET @department = parsename(replace(replace(@value,'[','.'),']','.'),2)
    
    SELECT replace(@value, @department, 'another_string');
    

    将返回:

    (company.[another_string] LIKE 'Development')
    

    解释:

    用点“。”替换括号你的@value 看起来像这样:

    (company..department. LIKE 'Development')

    这样的模式类似于:

    Server name.Database name.Schema name.Object name

    您可以使用parsename函数提取字符串的一部分,其中:1 = Object name2 = Schema name3 = Database name4 = Server name

    此处的函数链接: https://docs.microsoft.com/en-us/sql/t-sql/functions/parsename-transact-sql

    DEMO

    【讨论】:

      【解决方案3】:

      尝试如下。

      DECLARE @value as nvarchar(max) 
      SET @value = '(company.[department] LIKE ''Development'')'; 
      declare @department NVARCHAR(100) 
      SELECT @department = Substring(@value, 
                             Charindex('[', @value) + 1, 
                             Charindex(']', @value) - 
                             Charindex('[', @value) - 1) 
      
      select Replace(@value, @department, 'another_string'); 
      

      输出

      (company.[another_string] LIKE 'Development')
      

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 2014-08-07
        • 2011-01-25
        相关资源
        最近更新 更多