使用mysql用空格替换ascii代码

时间:2014-05-20 20:06:07

标签: mysql

我翻过这篇文章Trouble in getting rid of spaces in MySql。我对ascii代码有类似的问题。 Ascii代码,如DLE,CAN,FS,GS,但缩短它的范围从12月16日到12月31日(OCT 020到OCT 037)。

帖子中的代码就像这样

UPDATE ANIMALS
SET PRODUCTS.description = REPLACE(
REPLACE(
   REPLACE(PRODUCTS.description
         ,CHAR(160),' ')
       , CHAR(194), ' ')
   , '  ', ' ');'

我的问题是,如果我的表名是ANIMALS且列名是description,我会更改什么,并且我想删除ascii代码,例如我在代码之前所说的代码。

很抱歉提出一个简单的问题,但我只是新的mysql。 Pplease帮助和提前感谢。

1 个答案:

答案 0 :(得分:0)

嗯......据我所知,这仍然不是MySQL以简洁的方式做的事情,而只是通过逐字符替换。

按照你的模式并以半可读的方式进行布局,这几乎是荒谬的,但是应该可以对表进行一次更新;

UPDATE ANIMALS
SET description = 
REPLACE(
 REPLACE(
  REPLACE(
   REPLACE(
    REPLACE(
     REPLACE(
      REPLACE(
       REPLACE(
        REPLACE( 
         REPLACE(
          REPLACE(
           REPLACE(
            REPLACE(
             REPLACE(
              REPLACE(
               REPLACE(description,
               CHAR(16),''),
              CHAR(17),''),
             CHAR(18),''),
            CHAR(19),''),
           CHAR(20),''),
          CHAR(21),''),
         CHAR(22),''),
        CHAR(23),''),
       CHAR(24),''),
      CHAR(25),''),
     CHAR(26),''),
    CHAR(27),''),
   CHAR(28),''),
  CHAR(29),''),
 CHAR(30),''),
CHAR(31),'');

An SQLfiddle to test with

如果你需要更经常地做,你可能最好创建一个为你做的功能;

CREATE FUNCTION STRIP(input VARCHAR(21844)) RETURNS VARCHAR(21844)
BEGIN
  DECLARE i INT DEFAULT 16;
  LOOP
   SET input = REPLACE(input, CHAR(i), '');
   IF i = 31 THEN
    RETURN input;
   END IF;
   SET i = i + 1;
  END LOOP;
END;
//

...然后只使用它进行更新;

UPDATE animals SET description=STRIP(description)

Another SQLfiddle

...并且始终记得在从Internet上的随机用户运行可能具有破坏性的SQL之前备份数据库。