2

一天前,我在stackoverflow上问了这个问题。当然,这很好用,但是有人知道我如何在不涉及任何 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 替换,但我可以看到执行上述操作将需要更多。

4

5 回答 5

3

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

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

我已经分别替换了-----因为有些边缘情况总体上需要两者,并且按顺序。

请参阅SQLFiddle

于 2013-11-13T06:15:23.497 回答
2

使用这样的用户定义函数(相应地使用分隔符)

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

样品小提琴

于 2013-11-13T06:47:50.237 回答
0

这应该有效:

select 
replace(
replace(
replace('Metallica - Hero of the Day', '-', ' ')
  , '  ', '')
  , ' ', '-')
于 2013-11-13T04:49:45.877 回答
0

你可以写你的查询。这对你来说太容易了。

假设您有一个名为 class(id, classname) 的表,其中包含两个字段。现在你在你的表中插入类名字段,即 Metallica - Hero of the Day。

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

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---今日英雄。

如果您将查询替换为。对于以下查询,我已从 Bohemian answer 获得帮助。

$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-the-Day

而已。简单的。

谢谢

于 2013-11-13T06:37:43.480 回答
0

你可以试试这个方法。

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

例如

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

希望这会帮助你。

于 2017-02-22T11:46:13.730 回答