-3

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

对于第二个:

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

请帮我查询第一项任务...在此先感谢

4

2 回答 2

1

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

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

  • 如果您想在多个连字符的任一侧最多删除一个空格,那么Puggan Se 的答案就是适合您的答案。

  • 如果您想在多个连字符的任一侧仅删除一个空格,则可以将相同的答案简化一点:

    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, '-'), ' ', '_')
    
于 2012-07-07T10:05:53.167 回答
1

听起来你可以用几个REPLACE

SELECT
  REPLACE(
    REPLACE(
      REPLACE(
        name,
        ' -',
        '-'
      ),
      '- ',
      '-'
    ),
    ' ',
    '_'
  ) as new_name
于 2012-07-07T09:20:16.993 回答