如何在mysql中删除hiphen之外的空格?

如何在mysql中删除hiphen之外的空格?,mysql,Mysql,我从mysql数据库中获取图像名称。我的图片包含两到三个扩展名为png的单词。此外,名称还包含hiphen符号。首先,我想删除 hiphen符号左右两侧的空格。其次,我想用下划线符号替换两个单词之间的空格。我如何编写此查询 第二个: 更新表\u name set colname=replace(colname,,“”) 请帮我查询第一个任务。。。 提前感谢听起来您可以使用一些替换 SELECT REPLACE( REPLACE( REPLACE( name

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

第二个:

更新表\u name set colname=replace(colname,,“”)

请帮我查询第一个任务。。。
提前感谢

听起来您可以使用一些
替换

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

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

但是,在回答您的具体问题时,并不清楚您到底想要什么:

  • 如果您希望在多个连字符的任意一侧最多删除一个空格,则是适合您的

  • 如果要在多个连字符的任意一侧删除一个空格,则可以稍微简化相同的答案:

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

    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, '-'), ' ', '_')
    

您想用这些更改更新表格,或者在选择示例时使用它们。示例比perception更好