2017-04-19 17 views
0

データベースから名前のリストを取得しています。mySQL - フィールド文字列の文字を無視する

SELECT * FROM people ORDER BY name ASC 

しかし名前のいくつかはのようなもの、と理由[

始まるの[mod]を無視する簡単な方法があり、これらは、すべてのリストの最後にはなく、アルファベット順になっています私の名前を並べ替えるときに、まだエントリを引き出す部分?だからまだ私のリストにジョンがいますか?

引き取り後にPHPを使用して並べ替える必要がありますか?

+0

あなたは言葉を使うように見えます「[ユーザー名がモデレータであることを示す名前の[mod] ' 、それがあなたがこのような状況で終わった理由です。 modがアトリビュートインジケータであることを意図している場合は、それに対して別のフィールドを作成するのが最善です。 – nonybrighto

答えて

1
SELECT *, replace(name,'[mod]','') as sortname FROM people order by sortname ASC 

(構文をチェックしてください)しかし、本質的に置き換える機能を使用

0

あなたはこのようにそれを行うことができます - NOT LIKEを使用する - あなたは「[MOD]」で始まる名前を除外しようとしている場合:

SELECT * FROM people WHERE name NOT LIKE '[mod]%'; 

編集LIKEの先頭に削除%を。

+0

値の真ん中にある 'not mod 'を' '[mod]%' 'と' '{mod}'(例えば、' '文中の' 'word [mod] '')を誤って除外してはいません。 – Dygnus

+0

フェアステートメント..編集済み – Zak

+0

ご協力ありがとうございました。 – user961882

1

空の文字列と[MOD]タグに置き換え:あなたが現在使用しているものを照合言及する省略

ORDER BY REPLACE(name, '[Mod]', '') 
0

を。また、どのようにソートしたいのか説明するのを忘れてしまった - '[mod]'がなかったかのように結果を並べ替えたいのですか?または、ASCIIテーブルの文字の順序に基づいていますか?

'['文字(0x5B)はASCIIの小文字の前にありますが、大文字の後に来ます。

1)を使用し、大文字と小文字を区別しソート

2)ソート `下(名)ASC名LIKE BY

3)ORDER「[MOD]によって:だから、ASCII文字コードに基づいてソートします%」DESC、名前ASC

あなただけソートするために、それを無視する場合:REPLACE BY

ORDER(名前、 '[MOD]'、 '')ASC

0

私はMySQLを使用しますSUBSTRING_INDEX機能。例えば文字列の末尾に開始し、そしてそれは、この例では、右角括弧を区切り文字を見つけるまで後方に見えるだろう

ORDER BY SUBSTRING_INDEX(name,']',-1) 

。区切り文字が見つかると、これまでのすべてを区切り文字まで返します。デリミタが見つからない場合は、文字列全体を返します。

ORDER BYに含める前に、動作をよりよく観察するために、SELECTリストの式をテストできます。

SELECT t.name 
    , SUBSTRING_INDEX(t.name,']',-1) AS x_mod 
    FROM (SELECT '[mod]john' AS name 
     UNION ALL SELECT 'james' 
     UNION ALL SELECT 'jude' 
     ) t 
ORDER BY 2 

戻り

name  x_mod 
--------- -------- 
james  james 
[mod]john john  
jude  jude  
0

用途:デモとして

SELECT * FROM people ORDER by REPLACE(name, '[mod]', ''); 

(これは、MySQLで動作します)