【问题标题】:Find and Replace All Special Character in SQL [duplicate]查找和替换 SQL 中的所有特殊字符 [重复]
【发布时间】:2015-09-12 01:04:06
【问题描述】:

我想复制新列中的所有行,并将所有特殊字符替换为 -。我的代码如下。

我的餐桌设计

 select * from mycode
    UPDATE mycode
    SET newName = Replace(myname, '%[^0-9a-zA-Z]%', '-')

我的代码正在复制,但特殊字符没有被替换

结果

【问题讨论】:

  • 不幸的是,没有像正则表达式替换这样的东西。希望有一天微软会添加这个功能......
  • 这可能会有所帮助stackoverflow.com/questions/1007697/…
  • 嗯,没有预装的 RegEx。但是,您可以安装CLR RegEx 函数。可以在此处找到指南:simple-talk.com/sql/t-sql-programming/… 我通常发现它们非常有用,至少可以替换。
  • @t-clausen.uk 你能在这里链接我重复的问题吗..

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


【解决方案1】:

尝试创建这个函数

create function dbo.RemoveSpecialChars (@s varchar(256)) returns varchar(256)
   with schemabinding
begin
   if @s is null
      return null
   declare @s2 varchar(256)
   set @s2 = ''
   declare @l int
   set @l = len(@s)
   declare @p int
   set @p = 1
   while @p <= @l begin
      declare @c int
      set @c = ascii(substring(@s, @p, 1))
      if @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122
         set @s2 = @s2 + char(@c)
      set @p = @p + 1
      end
   if len(@s2) = 0
      return null
   return @s2
   end

然后做你的UPDATE

   UPDATE mycode
    SET newName = dbo.RemoveSpecialChars(mycode)

【讨论】:

  • 没有得到结果可以不做这个吗
  • 谢谢!这非常有效。这是否也会删除 TM 和版权字符?
【解决方案2】:

试试这个查询

DECLARE @specialchar varchar(15)
DECLARE @getspecialchar CURSOR
SET @getspecialchar = CURSOR FOR
SELECT DISTINCT poschar 
    FROM   MASTER..spt_values S 
           CROSS APPLY (SELECT SUBSTRING(newName ,NUMBER,1) AS poschar from mycode ) t 
    WHERE  NUMBER > 0 

           AND NOT (ASCII(t.poschar) BETWEEN 65 AND 90 
                     OR ASCII(t.poschar) BETWEEN 97 AND 122 
                     OR ASCII(t.poschar) BETWEEN 48 AND 57)

OPEN @getspecialchar 
FETCH NEXT
FROM @getspecialchar INTO @specialchar 
WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE mycode 
        SET newName =Replace(myname,@specialchar,'')
FETCH NEXT
FROM @getspecialchar INTO @specialchar 
END
CLOSE @getspecialchar 
DEALLOCATE @getspecialchar 

【讨论】:

  • Mukesh kalgude:两票给你的答案,但我没有得到结果
猜你喜欢
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多