2009-07-31 42 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 
  • 的意思是 「不」(顯然))
  • ^手段 「打頭」
  • [[:阿爾法:]]表示 「字母字符只有」

查找更多關於REGEXP in MySQL's manual

1

這是可能的,你可以嘗試將它轉換爲一個char:

CAST('#' AS CHAR) 

,但我不知道這是否會爲井號工作(又名英鎊符號:)),因爲這是用於啓動符號在MySQL評論

+0

我是一個真正的MySQL新手。 NOT IN條款只是爲了將其放到上下文中而已。 請問你能多解釋一下:) – 2009-07-31 18:16:44

+0

只是用`AND IF(LEFT(title,1)='#',1,0)`替換`AND IF(LEFT(title,1)= CAST(' 'AS CHAR),1,0)`,但就像我說過的,我不知道它是否會起作用w /八角形 – Jason 2009-07-31 18:20:21

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

使用INSTR得到一個給定的字符串的位置 - 如果要在一個字符串開始,檢查0(可能是1 - 如果它是一個基於零個或一個文檔沒有說明) 。