我正在尝试替换固定的定界列表中的值,并且我知道这违反规范。但是我别无选择。我编写了一个查询,该查询替换定界列表中的值,并且如果我尝试替换的值已经存在,则避免重复。
我的查询在SQL Server 2017中工作正常,但在SQL Server 2014中不工作。我收到一条错误消息。我需要此查询才能在SQL Server 2014中使用。我非常感谢。我的查询与小提琴执行链接一起在下面给出。错误消息是
消息156级别15状态1的第4行
关键字“ FROM”附近的语法不正确。信息102的15级状态1线14
“输入”附近的语法不正确。消息102的15级状态1行23
“替换”附近的语法不正确。
https://dbfiddle.uk/rdbms=sqlserver_2014&fiddle=9eb71e1e90b07c8c150004dc9a6d5107
UPDATE test
SET appValue = TRIM(',' FROM REPLACE(inputs.expression, inputs.pattern, replacement.value))
FROM test
CROSS APPLY
(SELECT
',' + appValue + ',' AS expression,
',' + '406' + ',' AS pattern,
',' + '506' + ',' AS replacement
) inputs
CROSS APPLY
(SELECT
CASE
WHEN inputs.expression LIKE '%' + inputs.replacement + '%'
THEN ','
ELSE inputs.replacement
END) replacement(value)
WHERE
inputs.expression LIKE '%' + inputs.pattern + '%'
答案 0 :(得分:2)
TRIM()
function是Sql Server 2017的新功能。对于较旧版本的Sql Server,您必须使用较旧的LTRIM()
和RTRIM()
函数,它们没有相同的{{ 1}}语法,或其他更复杂的字符串函数,例如characters FROM string
和CHARINDEX()
。
最简单的方法可能是SUBSTRING()
所有带有特殊字符的空格(您知道该空格都不属于数据的一部分),然后REPLACE()
带有空格的所有逗号,使用旧的{{ 1}} / REPLACE()
函数,LTRIM()
空格再次回到逗号,而RTRIM()
特殊字符回到空格。
REPLACE()
或者,如果您知道可能只有一个多余的尾随或前导逗号,则可以对此进行测试,然后使用SUBSTRING()删去该字符。