实现这样功能的SQL语句怎么来写?比较麻烦,喜欢挑战的人进来看看!

kangaroo 2003-09-22 12:20:14
我有一个表TableA 其中 有一个 Field, Name为Email Address,

现在我需要做一个查询,跟一个字符串进行比较假设该字符为:"@sohu.com;@sina.com;@china.com".

写SQL语句可以实现这个功能吗?应该怎么来实现,大家给点思路, 好象用STRINGTOKENIZER不太好实现!


查询出来的结果应该为:
Email Address
a@sohu.com
b@sina.com
c@china.com

多谢了,大家应该明白了吧?

...全文
10 点赞 收藏 60
写回复
60 条回复
xmvigour 2003年09月27日
或者再建一个表TableB
字段mail
insert into TableB values("@sian.com");
insert into TableB values("@sohu.com");

然后

select distinact a.* from TableA a,TableB b where a.EmailAddress like '%'+trim(b.mail)+'%'
回复 点赞
kangaroo 2003年09月27日
xmvigour(微电),

谢谢这么多兄弟,问题解决了,多谢!!

散分
回复 点赞
shuki 2003年09月26日
PreparedStatement ps = new PreparedStatement();
for(int i = 0;i<number;i++){
sql = select * from TableA where EmailAddress = ?
ps.setString(1,"like'%@sohu.com%'");
ResultSet rs = ps.executeQuery(sql);
}
have a try ,then put the rs into a total ResultSet instance ,which is the result.
回复 点赞
kangaroo 2003年09月26日
noratong(诺拉),

兄弟,如果非鱼说的可行的话,我觉得 这样到相对要简单很多!,你认为呢?

你说的有点麻烦!




Diego2000(非鱼) ( )

用OR是行的,即使还有其他查询条件要组合到一起

难道你不会用一个大的括号讲它们括起来,比如:
select * from TableA where (other Conditions)and ( EmailAddress like '%@sohu.com%' or EmailAddress like '%china.com%')不就是可以吗?
不过我建议你不要光用sql,那样很麻烦,而且过度依赖数据库提供的函数回不好移植。



回复 点赞
noratong 2003年09月26日
哦。那就单独建个小表呢???就存放Email分解的那两个字段和一个与用户相对应的字段(例如用户ID之类的)。
查询有点麻烦,但我觉得应该还是没问题的。我查询的时候可以先一查询出你要的那几个电子邮箱的用户ID,然后根据这些ID再来其它的条件筛选。
要全部显示出来可能有点困难,但还是可以办到的,只看你想不想挑战而已了。
如果不行再讨论。
回复 点赞
kangaroo 2003年09月26日
noratong(诺拉),

表里只有一个EMAIL 字段,但是字段里可能有多个EMAIL地址啊
比如

Name EmailAddress Phone
Andy andy@sohu.com;a@sina.com 010-88888888
Eric Eric@163.com;b@yeah.net 020-124333434

回复 点赞
zhaolinhong 2003年09月25日
如果是oracle数据库
可以通过这个实现:

select * from TableA where EmailAddress like '%@sohu.com%' or EmailAddress like '@sina.com' or EmailAddress like '@china.com%';
回复 点赞
xmvigour 2003年09月25日
sql一下子写死好象不是很容易
有多余的条件那有什么关系
你先把其它的条件写上 在order by 或者group by之前 用 and 你的条件不就可以了

一般象我们这有很多查询 而且都是jdbc直接查询的 所以每次都要组装一下sql!
回复 点赞
noratong 2003年09月25日
包含有多个EMAILADDRESS是什么意思??难道你原来的表里有几个EMAILADDRESS字段吗??
如果你原来的表里只有一个EMAILADDRESS的话(我想应该只有一个),就像我说的:把这个字段扯成两个,一个就装XXX@.com或者是XXX@.com.cn(这两个都无所谓,反正只要表示域名就可以了,如果邮箱地址里没有这两个的字符就不填这个字段),这个字段我们暂时称之为AAA;另一个字段就是它们中间的那些字符,这个字段我们暂时称之为BBB。
这样以来的查询不管有多少条件,只要再加个“BBB in(你要查的那些字符)”条件不就可以了吗?
就是显示EMAILADDRESS有点麻烦,不过有String类的方法也很方便。
回复 点赞
lynx1111 2003年09月25日
select * from tb where ';@sohu.com;@sina.com;@china.com;' like '%;'+email+';%'

回复 点赞
李欣欣1981 2003年09月25日

干吗非得在sql语句上下功夫!
把email字段一次取出来,在程序里分开岂不是更爽!
还用讨论这么多吗?
看大家写的,其实都只是把email字段拿出来啊!
改变一下思路,不久豁然开朗了吗?
真受不了,小问题这么大的人气!
回复 点赞
kangaroo 2003年09月25日
Diego2000(非鱼),

谢谢你!

我真的好笨啊,怎么就没想到()可以帮助实现这个功能
回复 点赞
JoeChen 2003年09月25日
select * from TableA where (EmailAddress like '%@sohu.com%' or EmailAddress like '@sina.com' or EmailAddress like '@china.com%') and (...) and ...
回复 点赞
Diego2000 2003年09月25日
用OR是行的,即使还有其他查询条件要组合到一起

难道你不会用一个大的括号讲它们括起来,比如:
select * from TableA where (other Conditions)and ( EmailAddress like '%@sohu.com%' or EmailAddress like '%china.com%')不就是可以吗?
不过我建议你不要光用sql,那样很麻烦,而且过度依赖数据库提供的函数回不好移植。
回复 点赞
kangaroo 2003年09月25日
zhaolinhong(小牛) ,

用OR是不行的,还有其他查询条件要组合到一起啊
回复 点赞
pandaatgd 2003年09月25日
select * from TableA where
EmailAddress like '%@sina.com%'+or '%@tom.com%'
回复 点赞
xsmart 2003年09月24日
跟本题并没有关系是因为,如果有其他条件就直接加阿!
select * from email where
FIND_IN_SET(trim(concat('@',SUBSTRING_INDEX(LOWER(email), '@', -1))),REPLACE('@sohu.com;@sina.com;@china.com',';',',')) > 0 and name='a'...后面都可以加你要限制的条件阿!
不过对于你后来说的EMAILADDRESS,我觉得还是zeeler(鸭子)的方案为好,毕竟sql不是万能的,配合周边语言才能更好的运用和发挥它;
回复 点赞
blue999star 2003年09月24日
按这个思路自己改改试试:
String bb = "@sohu.com,@sohu.com,@sohu.com";//bb的值动态传入
Stirng aa[] = bb.split(",");
for(int i=0;i<aa.lengh;i++){
String sql = "select distinct Field,EmailAddress from TableA where EmailAddress like '"+aa[i]+"'order by Field ";
sql + =" union";
}
把最后一个union 去掉.
如果是oracle数据库,就好办了.oracle提供了很多函数.
回复 点赞
myxd 2003年09月24日
你用的是什么数据库
看看数据库有没有比较强字符串处理函数。
如果没有,就只有程序处理了
回复 点赞
kangaroo 2003年09月24日
noratong(诺拉) ,

我的EMAILADDRESS可能包含有多个,该怎么弄?

回复 点赞
发动态
发帖子
Web 开发
创建于2007-09-28

5.2w+

社区成员

34.1w+

社区内容

Java Web 开发
社区公告
暂无公告