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

时间:2018-03-28 08:17:37

标签: sql-server string tsql replace extract

我有以下查询:

WebController

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

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

你可能会说为什么我不能立即使用替换功能。 情况是这个部门字符串可以动态地改变为另一个字符串,例如country,我希望每次都保持这个选择并用值更改它。

3 个答案:

答案 0 :(得分:2)

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

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

警告包括您只有一个括号内的术语,并且此答案的查询形式可用于您的特定场景。

Demo

答案 1 :(得分:1)

尝试以下。

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

答案 2 :(得分:1)

您的特定情况将与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');

将返回:

(company.[another_string] LIKE 'Development')

说明:

用点'替换括号'。'你的@value将如下所示:

(company..department. LIKE 'Development')

这种模式类似于:

Server nameDatabase nameSchema nameObject 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