我的SQL脚本中有很多更新语句:
UPDATE DBO.Products SET products_fullTextSearch = REPLACE(products_fullTextSearch, ' ', '')
UPDATE DBO.Products SET products_fullTextSearch = REPLACE(products_fullTextSearch, '°', '')
UPDATE DBO.Products SET products_fullTextSearch = REPLACE(products_fullTextSearch, '±', '')
UPDATE DBO.Products SET products_fullTextSearch = REPLACE(products_fullTextSearch, '\', '')
UPDATE DBO.Products SET products_fullTextSearch = REPLACE(products_fullTextSearch, '/', '')
..............................
etc
我怎么能在一个UPDATE语句中做到这一点?
答案 0 :(得分:0)
您可以尝试嵌套REPLACE
:
UPDATE DBO.Products
SET products_fullTextSearch =
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(products_fullTextSearch, ' ', ''),'°', ''),
'±', ''
),
'\', ''
),
'/', ''
)
答案 1 :(得分:0)
在其他一些RDBMS中,TRANSLATE函数可以承担这项工作的冲击,但是Alas SQL Server没有TRANSLATE等价物。它并没有阻止人们想要它......
CREATE FUNCTION dbo.Translate
(
@Input AS VarChar(1000),
@Find AS VarChar(100),
@Replace AS VarChar(100)
)
RETURNS VarChar(1000)
AS
BEGIN
DECLARE @i AS TinyInt
SELECT @i = 1
WHILE @i <= LEN(@Find) BEGIN
SELECT @Input = REPLACE(@Input, SUBSTRING(@Find, @i, 1), SUBSTRING(@Replace, @i, 1))
SELECT @i = @i + 1
END
RETURN @Input
END
GO
DECLARE @String AS VarChar(1000)
SELECT @String = 'pootle_flump'
SELECT @String = dbo.Translate(@String, 'pt', 'xz')
PRINT @String
来源:http://www.dbforums.com/showthread.php?1216565-Oracle-Translate-function-equivalent-in-SQL-Server
您可以这样使用它:
UPDATE DBO.Products
SET products_fullTextSearch = REPLACE(dbo.Translate(products_fullTextSearch, '°±\/', ' '), ' ', '')
工作原理:
首先,TRANSLATE会将您不想要的4个字符转换为空格(这也是您不想要的字符)
之后,REPLACE会将所有空格变为空白
翻译的美妙之处在于可以轻松扩展交换字符的数量。翻译采用&#34;发现&#34;的第一个字符。字符串并将其替换为&#34;中的第一个字符替换&#34;串。然后它移动到第二个字符(在查找和替换中)
以下命令:
Translate(input_text, 'abcd', '1234')
会做出这些修改:
'cat' -> '31t'
'dog' -> '4og'
'ffeeddccbbaa' -> 'ffee44332211'
实际上,没有必要使用REPLACE,因为你可以利用&#34; quirk&#34;通过为&#34;替换&#34;提供零长度字符串,子字符串将完成其工作。参数:
UPDATE DBO.Products
SET products_fullTextSearch = dbo.Translate(products_fullTextSearch, '°±\/ ', '')
因为该功能会尝试在&#34;替换&#34;中找到单个字符。 &#34; find&#34;中每个字符的字符串参数字符串,并且因为&#34; replacement&#34;中没有字符,子字符串将始终返回null(或零长度字符串)作为替换字符,这意味着&#34;找到&#34中的字符; string将被替换为(nothing)