字段类型为String,值为2010-1-5241的记录,如何查询?

奋斗一生的程序员 2010-08-29 09:57:26
SQLServer中,有一Table,有一字段 BianHao,类型为String,其值如下:
2010-1-5241
2010-1-6000
2010-3-365
2010-1-5288
2010-1-898
2010-2-6521
2010-1-555

想查询出,BianHao值在 2010-1-5000 到 2010-1-6000 之间的记录,请问如何实现?

如果这样写 WHERE bianhao BETWEEN '2010-1-5000' AND '2010-1-6000'
则 2010-1-555,也会被统计出来了,这不是我们要的结果。

提供正确解决办法者,给一百分。
...全文
94 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢大家,数据库已经使用,故字段无法修改。
vbman2003 2010-09-03
  • 打赏
  • 举报
回复
2010-1-固定的

....
WHERE cast(replace(bianhao,'2010-1-','') as int) BETWEEN 5000 AND 6000
vbangle 2010-08-29
  • 打赏
  • 举报
回复
这个数据库字段设计考虑不周,这样查询很影响效率的,

如果项目还未将会使用,建议更改字段或更改保存记录时就按特定的格式转换好后,再保存,以方便查询
阿双2009 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jlmugua 的回复:]
楼上的同志,思路值得赞赏。但是结果不对。
因为,'2010-1-'后面的数字,位数从1到10位,都有的。比如
2010-1-1
2010-1-100
2010-1-12333
2010-1-1987654
[/Quote]

select * from tableName where left(BianHao,7)='2010-1-' and len(BianHao)=11 and
convert(int,right(BianHao,4)>=5000 and
convert(int,right(BianHao,4)<=6000
  • 打赏
  • 举报
回复
楼上的同志,思路值得赞赏。但是结果不对。
因为,'2010-1-'后面的数字,位数从1到10位,都有的。比如
2010-1-1
2010-1-100
2010-1-12333
2010-1-1987654
阿双2009 2010-08-29
  • 打赏
  • 举报
回复

select * from tableName where left(BianHao,7)='2010-1-' and
convert(int,right(BianHao,4)>=5000 and
convert(int,right(BianHao,4)<=6000
  • 打赏
  • 举报
回复
补充一下,查询条件中,bianhao前7位会要求是一样的,都是 2010-1-
  • 打赏
  • 举报
回复
本帖创造了我在csdn从发帖到结帖的最短时间记录。
  • 打赏
  • 举报
回复
对不住了,各位,中午停电了。我又思考了一下,想出以下办法(受luols的启发),而且不用更改表结构。

WHERE left(bianhao,7)='2010-1-' AND right(bianhao,len(bianhao)-7)>=5000 AND right(archid,len(bianhao)-7)<=6000

结帖。luols95分,vbman2003的办法不可行,但加5分,以资奖励。
vbman2003 2010-08-29
  • 打赏
  • 举报
回复
如下可以吧?
WHERE replace(bianhao,'-','') BETWEEN '201015000' AND '201016000'

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧