MySql用连字符替换空格

时间:2013-11-13 04:42:27

标签: mysql

前一天,我在stackoverflow上询问了这个question。当然,这很好用,但有没有人知道如何在没有涉及任何PHP的MySql语句中做同样的事情?

例如:select preg_replace(:songName,' ', '-') //Ugh, this is wrong.

我要做的是用spaces替换-。但有时候,当有空格时,我会得到更多-

例如:Metallica - Hero of the Day最终为Metallica---Hero-of-the-Day

任何机会做到这一点:Metallica-Hero-of-the-Day

顺便说一句:这不仅仅是我要取代的歌曲名称。

我可以使用简单的MySql替换,但我可以看到执行上述操作需要更多。

5 个答案:

答案 0 :(得分:3)

我会首先用连字符替换空格,然后处理可能已经创建的任何多个连字符:

select replace(replace(replace(songTitle, ' ', '-'), '---', '-'), '--', '-')

我已经单独替换了-----,因为有一些边缘情况总体上需要这两种情况,并按此顺序。

请参阅SQLFiddle

答案 1 :(得分:2)

使用这样的用户定义函数(相应地使用delimetres)

CREATE FUNCTION replace_spaceWithHyphen(textToReplace varchar(100))
RETURNS TEXT
BEGIN
DECLARE occHyphen int; 
DECLARE occSpace int; 
set occHyphen = 1;
set occSpace = 1;
WHILE (occHyphen <> 0 || occSpace <> 0) DO
        SELECT LOCATE('--',textToReplace) into occHyphen;
        SELECT LOCATE(' ',textToReplace) into occSpace;
        SELECT REPLACE(textToReplace,' ','-') into textToReplace;
        SELECT REPLACE(textToReplace,'--','-') into textToReplace;
    END WHILE;
  RETURN textToReplace;
END;

然后按以下方式调用您的选择:

SELECT replace_spaceWithHyphen('Metallica - Hero of the Day');

答案是:

TEXT
Metallica-Hero-of-the-Day

<强> SAMPLE FIDDLE

答案 2 :(得分:0)

这应该有效:

select 
replace(
replace(
replace('Metallica - Hero of the Day', '-', ' ')
  , '  ', '')
  , ' ', '-')

答案 3 :(得分:0)

您可以编写查询。这对你来说很容易。

假设您有一个名为class(id,classname)的表,其中包含两个字段。现在,您可以在类名字段中插入表格,即Metallica - 每日英雄。

现在您可以通过以下给定的程序执行此操作。

mysql_connect('localhost','root','');
mysql_select_db('dbname');            // Please insert your dbname

$query = mysql_query('SELECT classname, REPLACE(classname," ","-") from class');
$record = mysql_fetch_array($query);
echo $record['REPLACE(classname," ","-")'];

它会给出输出。即Metallica ---每日英雄。

如果你用。替换你的查询。我已经从波西米亚语的答案中获得了以下查询的帮助。

$query = mysql_query("SELECT classname, replace(replace(replace(classname, ' ', '-'), '---', '-'), '--', '') from class");
$record = mysql_fetch_array($query);
echo $record["replace(replace(replace(classname, ' ', '-'), '---', '-'), '--', '')"];

您将获得结果,即Metallica-Hero-of-Day

就是这样。容易。

由于

答案 4 :(得分:0)

你可以尝试这种方法。

UPDATE TABLE_NAME SET column_name = REPLACE(column_name, old_value, new_value);

例如

UPDATE TABLENAME SET column_name = REPLACE(column_name, '-', ' ');

希望这会对你有所帮助。