2009-07-31 65 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 - 如果它是一个基于零个或一个文档没有说明) 。