如何在 SQL 中提取方括号之间的文本

How to extract text between square brackets in TSQL

我有以下查询:

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

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

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

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

像下面这样尝试。

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')

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

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

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

Demo

您的特定案例将理想地与 parsename 函数一起使用:

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');

将return:

(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

link 在这里发挥作用: https://docs.microsoft.com/en-us/sql/t-sql/functions/parsename-transact-sql

DEMO