如何使这个sql server更新语句更好?

时间:2015-05-28 15:21:57

标签: sql-server sql-server-2008 sql-update

我在下面有这个更新声明,有没有办法让它变得更好?我不知道这是否需要花费很长时间才能与那里的解决方案进行比较。

update TableName 
set 
    ColumnTwoName = REPLACE(LTRIM(RTRIM(ColumnOneName)),'(',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,')',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'+',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'*',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'&',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'@',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'|',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'/',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'!',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'.',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,',',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,':',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'£',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'?',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'''',''),
    ColumnTwoName = REPLACE(ColumnTwoName,'-',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,']',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'%',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'  ',' '),
    ColumnTwoName = REPLACE(ColumnTwoName,'   ',' '),
    ColumnTwoName = REPLACE(LTRIM(RTRIM(ColumnTwoName)),' ','-'),
    ColumnTwoName = REPLACE(ColumnTwoName,'--','-'),
    ColumnTwoName = LOWER(ColumnTwoName)
where ColumnTwoName is null or ColumnTwoName = ''

2 个答案:

答案 0 :(得分:0)

没有一种简单的方法来格式化这么多嵌套的替换,所以看起来不错。我离开了这个非常粗糙,所以你可以这样做。

LOWER(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
LTRIM(RTRIM(ColumnOneName))
,'(',' ') 
,')',' ')
,'+',' ')
,'*',' ')
,'&',' ')
,'@',' ')
,'|',' ')
,'/',' ')
,'!',' ')
,'.',' ')
,',',' ')
,':',' ')
,'£',' ')
,'?',' ')
,'''','')
,'-',' ')
,']',' ')
,'%',' ')
,'  ',' ')
,'   ',' ')
,' ','-')
,'--','-')
) 

答案 1 :(得分:0)

在进行字符替换时,这里有一个StackOverflow问题,它有一些更常用的选项:

How to Replace Multiple Characters in SQL?

似乎最好的想法是使用正则表达式创建CLR。效率较低但功能较强的方法是创建标量函数。做内联的所有嵌套替换也可以很好地工作......但它看起来不漂亮,并且它不是非常通用的。

如果您试图摆脱所有重复的空格,那么如果有足够多的空格串在一起,那么您正在进行的替换将无法正常工作。如果不使用CLR,则可以在while循环中使用更新来递归删除多余的空格。类似的东西:

pipeOut

我刚刚在此示例中添加了select @@ROWCOUNT While @@ROWCOUNT > 0 update TableName set ColumnTwoName = REPLACE(ColumnTwoName,' ', ' ') where ColumnTwoName like '% %' 语句,以确保Select @@ROWCOUNT为1,以便它第一次进入while循环,但您可以执行任何操作以确保这一点。