我从mysql数据库中获取图像名称。我的图像包含两到三个带png扩展名的单词。名字也包含hiphen符号。首先,我想删除 臀部符号左右两侧的空间。其次,我想用下划线符号替换两个单词之间的空格。我该如何为此编写查询?
第二个:
UPDATE table_name set colname = replace(colname,'','')
请帮我查询第一个任务... 提前致谢
答案 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, '-'), ' ', '_')