我在下面有这个更新声明,有没有办法让它变得更好?我不知道这是否需要花费很长时间才能与那里的解决方案进行比较。
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 = ''
答案 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循环,但您可以执行任何操作以确保这一点。