我从 mysql 数据库中获取图像名称。我的图片包含两到三个带有 png 扩展名的单词。名称也包含 hiphen 符号。首先,我想删除 hiphen 符号左右两侧的空格。其次,我想用下划线符号替换两个单词之间的空格。我该如何为此编写查询?
对于第二个:
UPDATE table_name set colname=replace(colname, ' ', '')
请帮我查询第一项任务...在此先感谢
我从 mysql 数据库中获取图像名称。我的图片包含两到三个带有 png 扩展名的单词。名称也包含 hiphen 符号。首先,我想删除 hiphen 符号左右两侧的空格。其次,我想用下划线符号替换两个单词之间的空格。我该如何为此编写查询?
对于第二个:
UPDATE table_name set colname=replace(colname, ' ', '')
请帮我查询第一项任务...在此先感谢
听起来您正在使用字符串来保存结构化数据,这不是对 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, '-'), ' ', '_')
听起来你可以用几个REPLACE
SELECT
REPLACE(
REPLACE(
REPLACE(
name,
' -',
'-'
),
'- ',
'-'
),
' ',
'_'
) as new_name