如何删除mysql中连字符以外的空格?

时间:2012-07-07 09:10:11

标签: mysql

我从mysql数据库中获取图像名称。我的图像包含两到三个带png扩展名的单词。名字也包含hiphen符号。首先,我想删除 臀部符号左右两侧的空间。其次,我想用下划线符号替换两个单词之间的空格。我该如何为此编写查询?

第二个:

UPDATE table_name set colname = replace(colname,'','')

请帮我查询第一个任务... 提前致谢

2 个答案:

答案 0 :(得分:1)

听起来你可以使用一些REPLACE

SELECT
  REPLACE(
    REPLACE(
      REPLACE(
        name,
        ' -',
        '-'
      ),
      '- ',
      '-'
    ),
    ' ',
    '_'
  ) as new_name

答案 1 :(得分:1)

听起来你使用字符串来保存结构化数据,这不是像MySQL这样的关系数据库管理系统的有效使用:你最好改变你的模式,以便每个离散数据单元都在它自己的列中(然后,您可以在从数据库中检索数据时重建所需的字符串)。

但是,在回答您的具体问题时,目前尚不清楚您想要的是什么:

  • 如果您想删除多个连字符两侧的最多一个空格,那么Puggan Se's answer就是您的选择。

  • 如果你想删除多个连字符两侧的一个空格,那么相同的答案可以简化一点:

    REPLACE(REPLACE(colname, ' - ', '-'), ' ', '_')
    
  • 如果要删除单个连字符两边的多个空格,最好使用MySQL的SUBSTRING_INDEX()函数拆分字符串,然后修剪结果:

    REPLACE(CONCAT(
      RTRIM(SUBSTRING_INDEX(colname, '-',  1)),
      '-',
      LTRIM(SUBSTRING_INDEX(colname, '-', -1))
    ), ' ', '_')
    
  • 如果要删除多个连字符两侧的多个空格,则需要创建一个循环遍历字符串的函数:

    DELIMITER ;;
    
    CREATE FUNCTION trim_delim (
        IN input TEXT
      , IN delim CHAR(1)
    )
    RETURNS TEXT
    DETERMINISTIC
    BEGIN
      DECLARE i      INT DEFAULT 1 ;
      DECLARE result TEXT;
    
      WHILE CHAR_LENGTH(input) > 0 AND cur_position > 0 DO
        SET i      := INSTR(input, delim);
    
        SET result := CONCAT(
          IF(CHAR_LENGTH(result) > 0, CONCAT(result, delim), ''),
          IF(i, RTRIM(LEFT(input, i - 1)), input)
        );
    
        SET input  := LTRIM(SUBSTRING(input, i + 1));
      END WHILE;
    
      RETURN result;
    END;;
    
    DELIMITER ;
    

    然后您可以使用此功能:

    REPLACE(trim_delim(colname, '-'), ' ', '_')