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, ' ', '-'), '---', '-'), '--', '-')

全体的に両方を必要とするエッジケースがあるため、この順序で---and を個別に置き換えました。--

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 を次のように呼び出します。

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

答えは次のとおりです。

TEXT
Metallica-Hero-of-the-Day

サンプルフィドル

于 2013-11-13T06:47:50.237 に答える
0

クエリを書くことができます。それはあなたにとってとても簡単です。

2 つのフィールドを持つ 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," ","-")'];

出力が得られます。つまり、メタリカ --- 今日のヒーロー。

クエリを次のように置き換えた場合。以下のクエリについて、ボヘミアンの回答から助けを得ました。

$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 に答える