str
が列の名前で、tablename
がテーブルの名前である場合、次のコードを使用できます。
MySQLは非常に限られてい
SELECT SUBSTRING(str,LOCATE("/",str)+1,LOCATE("-",str)-LOCATE("/",str)-1) AS year,
SUBSTRING(str,LOCATE("-",str)+1, LENGTH(str) - LOCATE("-",REVERSE(str)) - LOCATE("-",str)) AS name,
SUBSTRING(str,LENGTH(str) - LOCATE("-",REVERSE(str)) + 2) as number
FROM tablename;
説明:あなたが唯一の文字列の名前部分を引き出すために探している場合は、単にSELECT句ラベル(便利)名前の一部を使用あなたの標準的な汎用プログラミング言語と比較して組み込みの文字列操作関数のセットですが、それはたいていの場合、良いテーブル構造がそのような関数の必要性を否定するためです。
とにかく、あなたが探しているものを達成するためのさまざまな方法があります。 1つの方法は、SUBSTRING
関数をLOCATE
関数、REVERSE
、およびLENGTH
関数と組み合わせて使用することです。最後の " - "の位置を取得するには、REVERSE
とLENGTH
を使用します。
文字列の最初の部分(年)を取得するのは比較的簡単です。SUBSTRING
関数を使用します。この関数は、列名、開始位置、および長さをパラメータとして使用します。開始位置は、実際には "/"(LOCATE("-",str)+1
)を必要としないので、最初の "/"の位置に1を加えたものです。長さは、最初の "/"から最初の " - "までの距離またはSQL LOCATE("-",str)-LOCATE("/",str)-1
の距離です。
ここで、後で文字列(名前)の2番目の部分に戻ってみましょう。文字列(数字)の3番目の部分については、と共に使用されるREVERSE
関数に魔法があります。最終的に最後の " - "の位置を見つけて、最後の " - "から部分文字列を文字列の最後まで取得したいとします。残念ながら、MySQLには文字の最後の出現を返す関数はありません。最後の " - "の位置を取得するためのトリックは、逆の文字列内の " - "の位置を取得し、文字列の長さからその位置を引くことです。 SQLでは、それはLENGTH(str) - LOCATE("-",REVERSE(str)) + 2
です。
ここでは、その中間部分(名前)を取得するために必要な情報があります。 SUBSTRING
関数を再び使用して、列名、最初の " - "の位置と最後の " - "までの長さを渡します。以上です!
出典
2017-01-16 22:23:20
VKK
これは役立つかもしれない:http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql –
後に第一のダッシュとすべてにすべてを削除します最後のダッシュ..ダッシュの数に関係なく残っているものは何ですか? (これは最初のセットを仮定し、最後のセットは複数のダッシュを持つことはできません) – xQbert
それは問題です。どのように最初のダッシュまでのすべてを取り除きますか、最後のダッシュの後のすべてを取り除きますか? –