sql中的select语句用正则表达式如何写?select name from employee where <condition>;

重点是如何写condition表达式?

第1个回答  2013-03-27
如果是 mysql 的话请用 rlike 或 regexp:

SELECT 'aXbc' REGEXP '[a-dXYZ]'; -> 1
SELECT 'aXbc' REGEXP '^[a-dXYZ]$'; -> 0
SELECT 'gheis' REGEXP '^[^a-dXYZ]+$'; -> 1
SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$'; -> 0

SELECT 'aXbc' RLIKE '[a-dXYZ]'; -> 1
SELECT 'aXbc' RLIKE '^[a-dXYZ]$'; -> 0
SELECT 'gheis' RLIKE '^[^a-dXYZ]+$'; -> 1
SELECT 'gheisa' RLIKE '^[^a-dXYZ]+$'; -> 0追问

我的意思是如何用正则表达式来表示表连接或者>,<,=等查询条件?

追答

没明白你的意思,既然是要大于小于等于的条件,那就直接用 > < = 这些符号做什么呢。

或者你给一些表中的数据,然后说说你想要什么样的结果吧,这样方便大家理解你的意思。

追问

不好意思,我在做数据库select语句的词法与语法分析,用正则表达式做的,遇到条件哪里不会写了。
select distinct ssn
from employee,department
where
select +(distinct)? +(([a-zA-Z\_$]\w*)|\*) +([\s\S][\d\D])?from +([a-zA-Z\_$]\w*(,[a-zA-Z\_$]\w*)*)([\s\S][\d\D])?where +()([\s\S][\d\D])?

追答

哦,这下明白了。想想我都觉得很难啊。如果只限制简单的条件的话还好,不然 where 里可以嵌套子查询什么的,越想越复杂,正则能递归不?能的话在 where 里一递归一下吧。哈哈。
词法分析这方面有成熟的工具 lex,你可以搜索看看,我只听过,但没用过。我认为要纯用一个正则来写难度真的很大,只能祝福你一切顺利啊。

本回答被提问者和网友采纳
第2个回答  2013-03-27
SELECT * FROM TableName WHERE A LIKE '%[^0-9]%'--非数字

SELECT * FROM TableName WHERE A NOT LIKE '%[^0-9]%'--数字追问

我的意思是如何用正则表达式来表示表连接或者>,<,=等查询条件?

相似回答