【问题标题】:MySql replacing spaces with hyphensMySql用连字符替换空格
【发布时间】:2013-11-13 04:42:26
【问题描述】:

一天前,我在 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 替换,但我可以看到执行上述操作将需要更多。

【问题讨论】:

  • 如您所知如何使用 mysql 替换,请执行以下操作:将每个 - 替换为一个空格,然后将两个空格替换为无空格,然后将一个空格替换为 -

标签: mysql


【解决方案1】:

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

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

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

SQLFiddle

【讨论】:

  • @PraveenPrasannan 这是我的错字。现在更正 - 见小提琴。注意:小提琴中的连字符 不是 标准连字符 - 这是一个奇怪的 Microsoft 破折号字符,不会被我的代码替换。我为我的小提琴改变了角色
  • @PraveenPrasannan 现在“Hero”和“of”之间的空格字符不是空格! (这是一个标签或一个不间断的空间......谁知道)。手动输入您的示例 - 不要从 Microsoft 特殊字符出没的文件名中复制粘贴。
  • 那些是纯白色的空间。但连续9个。就这些
【解决方案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

SAMPLE FIDDLE

【讨论】:

    【解决方案3】:

    这应该可行:

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

    【讨论】:

    • 没有办法像我们在上一个答案中那样在 MySQL 中使用 preg_replace 之类的东西?
    • 您可以使用 UDF(用户定义函数)来执行此操作。纯 Mysql 你不能像这个答案那样:stackoverflow.com/questions/986826/…
    【解决方案4】:

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

    假设您有一个名为 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

    就是这样。很简单。

    谢谢

    【讨论】:

      【解决方案5】:

      你可以试试这个方法。

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

      举例

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

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        相关资源
        最近更新 更多