免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2763 | 回复: 13
打印 上一主题 下一主题

跪求一SQL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-25 09:56 |只看该作者 |倒序浏览
有如下数据:

00000
00001
00002
00003
00004

.........

99998
99999


求匹配如下模式的数据:ABABA,AAABB,ABCDE  ,其中ABCDE,为0~9的数字

这样的sql怎么写?

论坛徽章:
0
2 [报告]
发表于 2009-03-25 09:57 |只看该作者

回复 #1 yang_java2004 的帖子

在线等...

论坛徽章:
0
3 [报告]
发表于 2009-03-25 11:03 |只看该作者
没看懂

论坛徽章:
0
4 [报告]
发表于 2009-03-25 11:48 |只看该作者
原帖由 yang_java2004 于 2009-3-25 09:56 发表
有如下数据:

00000
00001
00002
00003
00004

.........

99998
99999


求匹配如下模式的数据:ABABA,AAABB,ABCDE  ,其中ABCDE,为0~9的数字

这样的sql怎么写?



我有一个超级笨的办法:
where (substr(field,1,1)=substr(field,3,1) and substr(field,1,1)=substr(field,5,1) and substr(field,2,1)=substr(field,4,1))
or
(......)
or
(......)

论坛徽章:
0
5 [报告]
发表于 2009-03-25 12:03 |只看该作者
这个办法太土了,那个规则我只列出了3个,其实还有30多个呢

论坛徽章:
0
6 [报告]
发表于 2009-03-25 13:34 |只看该作者
mod(
((ascii(substr(field,1,1))-ascii(substr(model,1,1)))*10000) +
((ascii(substr(field,2,1))-ascii(substr(model,2,1)))*1000) +
((ascii(substr(field,3,1))-ascii(substr(model,3,1)))*100) +
((ascii(substr(field,4,1))-ascii(substr(model,4,1)))*10) +
((ascii(substr(field,5,1))-ascii(substr(model,5,1)))*1),
11111) = 0

论坛徽章:
0
7 [报告]
发表于 2009-03-25 13:36 |只看该作者
想不出更好的办法了

想简化一点的话,那就先给那个表另加5个字段
然后分别截取相应位置的数据放进这5个字段里

最后再在where条件里对5个字段分别进行比较,可以少写一些substr

论坛徽章:
0
8 [报告]
发表于 2009-03-25 15:17 |只看该作者
原帖由 doni 于 2009-3-25 13:34 发表
mod(
((ascii(substr(field,1,1))-ascii(substr(model,1,1)))*10000) +
((ascii(substr(field,2,1))-ascii(substr(model,2,1)))*1000) +
((ascii(substr(field,3,1))-ascii(substr(model,3,1)))*100) +
((a ...




能解释下不?

论坛徽章:
0
9 [报告]
发表于 2009-03-25 17:20 |只看该作者
原帖由 doni 于 2009-3-25 13:34 发表
mod(
((ascii(substr(field,1,1))-ascii(substr(model,1,1)))*10000) +
((ascii(substr(field,2,1))-ascii(substr(model,2,1)))*1000) +
((ascii(substr(field,3,1))-ascii(substr(model,3,1)))*100) +
((a ...


想了一下,这个还是不对

这个直接用SQL不太好写,需要一些编程手段

[ 本帖最后由 doni 于 2009-3-25 17:21 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-03-26 11:23 |只看该作者
先建立一个模式表 create table hm_mod (hm_mod varchar2(5));
存 AAABB ABABA
再建一个表  create table hm (hm varchar2(5))
  存号码
SELECT *   FROM hm A ,HM_MOD B WHERE
TRANSLATE(HM_MOD,HM_MOD,hm) = hm;
这种用来试试看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP