如何在 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;
注意事项包括您只有一个括号内的术语,而且这种查询形式的答案将在您的特定场景中可用。
您的特定案例将理想地与 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 name
、2 = Schema name
、3 = Database name
、4 = Server name
link 在这里发挥作用:
https://docs.microsoft.com/en-us/sql/t-sql/functions/parsename-transact-sql
我有以下查询:
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;
注意事项包括您只有一个括号内的术语,而且这种查询形式的答案将在您的特定场景中可用。
您的特定案例将理想地与 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 name
、2 = Schema name
、3 = Database name
、4 = Server name
link 在这里发挥作用: https://docs.microsoft.com/en-us/sql/t-sql/functions/parsename-transact-sql