2013-06-30 5 views
7

私はいくつかの値を抽出するテーブルを持っています、1つの列の値は "value1 | value2 | value3"を含むことができますが、 - "値1"。MySQLは特定の文字の前にすべての文字を取得します

これは私が試したものですが、動作しません。何が間違っていますか? ありがとう!

$ sqlを=「* LEFTを選択します( '|' '' と同様、(LOCATE 'のように') - 1)$テーブル名 FROM WHERE Parent =のOrder BY '0' とタイプLIKE 'トップ' ORDER ASC ";あなたがしたい場合は

LEFT([ColName],INSTR([ColName],"|")-1) 

:あなたは[COLNAME]の部分を取得するには、次のステートメントを必要とする、私はすべての値だけではなく、一つのフィールドのためにこれを使用したい

..

答えて

10

複数の列を同じレコードセットの列に選択すると、次のようなものをすべて組み合わせることができます。

SELECT LEFT(ColName,INSTR(ColName,"|")-1) AS FirstValue From $TableName; 
UNION ALL 
SELECT LEFT(ColName2,INSTR(ColName2,"|")-1) AS FirstValue From $TableName; 

これを複数の列で使用するには、SQLの作成をスクリプト化します。

5

2つのこと:(1)あなたは*と表現あなたがLEFTで何をしようとしていると、(2)あなたが引用符でlikeを入れているので、機能が作業している間にコンマを持っていません列の代わりにlikeの定数値likeを使用してください。 likeをバックティックに入れてみてください。

SELECT *, LEFT(`Like`, LOCATE('|', `Like`)-1) 
... 

また、このためのMySQL SUBSTRING_INDEX機能を使用することができます。

SELECT *, SUBSTRING_INDEX(`Like`, '|', 1) 
... 
+0

ありがとうございます.SUBSTRING_INDEXソリューションのように – zhihong

0

私は簡単な方法があると思います:

strSplit(ColName,'|',1) 

は私が修正アム?

関連する問題