2009-07-31 29 views
5
SELECT * 
FROM `thread` 
WHERE forumid NOT IN (1,2,3) AND IF(LEFT(title, 1) = '#', 1, 0) 
ORDER BY title ASC 

#で始まるものは何かを選択するこのクエリがあります。私がしたいことは、#が数値と特殊文字を探す値として与えられた場合です。または普通の手紙ではないもの。MySQL - 数字または特殊文字で始まる場合

どうすればよいですか?

答えて

17

あなたはその "タイトル" REGEXPを使用し、文字で始まらないすべての行を選択したい場合:

SELECT * 
    FROM thread 
    WHERE forumid NOT IN (1,2,3) 
    AND title NOT REGEXP '^[[:alpha:]]' 
ORDER BY title ASC 
  • ませを "ない" を意味します(当然;))
  • ^手段[​​[:alphaは:]]
  • "で始まる"は "のみアルファベット文字を"
  • を意味し、

REGEXP in MySQL's manualについて詳しくは、こちらをご覧ください。

+1

regexpマニュアルを動作させるURLはhttps://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexpです – dsomnus

1

それはあなたがcharとしてそれをキャストしようとすることができることが可能です。

CAST('#' AS CHAR) 

が、それが起動するための記号だから、これはシャープ(別名シャープ記号:))のために働く場合、私は知りません( - それは、ゼロまたはベースの一つだ場合のドキュメント状態しない可能性1)文字列の開始時に、あなたがしたい場合は、0をチェック - MySQLの

+0

実際のMySQL初心者です。 NOT IN句は、文脈に入れるだけで私の頭を揺るがすものです。 もう少し説明してください:) –

+0

「AND IF(LEFT(タイトル、1)= CAST( '#」、 'AS CHAR)、1、0) 'と言ったように、私は言ったように、私はそれが働くかどうかわからない/ octothorpes – Jason

+0

それは動作しません。それは何も返さない。 –

1
SELECT t.* 
    FROM `thread` t 
    WHERE t.forumid NOT IN (1,2,3) 
    AND INSTR(t.title, '#') = 0 
ORDER BY t.title 

与えられた文字列の位置を取得するにはINSTRを使用中のコメント。