我有以下查询:
WebController
我想在括号之间提取单词,将其保存在一个值中,然后将其作为输入放在这样的替换函数中。
DECLARE @value as nvarchar(max)
SET @value = '(company.[department] LIKE ''Development'')';
你可能会说为什么我不能立即使用替换功能。 情况是这个部门字符串可以动态地改变为另一个字符串,例如country,我希望每次都保持这个选择并用值更改它。
答案 0 :(得分:2)
您可以通过基本字符串函数在查询中执行此操作:
SELECT
SUBSTRING(col,
CHARINDEX('[', col) + 1,
CHARINDEX(']', col) - CHARINDEX('[', col) - 1) AS output
FROM yourTable;
警告包括您只有一个括号内的术语,并且此答案的查询形式可用于您的特定场景。
答案 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 name
。Database name
。Schema name
。Object name
您可以使用parsename
函数提取字符串的一部分,其中:1 = Object name
,2 = Schema name
,3 = Database name
,4 = Server name
链接到此处的功能: https://docs.microsoft.com/en-us/sql/t-sql/functions/parsename-transact-sql
<强> DEMO 强>