CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

在SQL语句中怎样对varchar类型的列进行数值大小的比较?

楼主lufree(荆州城公子三求计,博望坡军师初用兵)2004-12-03 16:41:00 在 MS-SQL Server / 基础类 提问

有一个varchar列,里面的内容有字符例如fgg,aa,bb等等,有数字,现在想进行数值大小的比较例如  
   
  select   *   from   table1   where   field1>20  
   
  可是因为列里面有字符数据,此语句不能执行:  
   
  服务器:   消息   245,级别   16,状态   1,行   1  
  将   varchar   值   'fgg'   转换为数据类型为   int   的列时发生语法错误。  
   
  我试过转换也不行,请教大家如何在不改变列的数据类型的情况下忽略字符数据,把那些数值数据用比较表达式查找出来? 问题点数:0、回复次数:10Top

1 楼lufree(荆州城公子三求计,博望坡军师初用兵)回复于 2004-12-04 00:31:01 得分 0

???Top

2 楼lienzhu(李强)回复于 2004-12-04 00:54:40 得分 0

sql="select   *   from   table1   where   field1   between   '20'   and   '9'"  
   
  这样会得到首字母为2   到   9   之间的所有数据,可能不全正确,但可以减少范围Top

3 楼yesyesyes()回复于 2004-12-04 13:28:08 得分 0

如果字符串中只有一个连续的整数数字子串,则  
  where   cast(substring  
  (field1,  
  patinedx('%[0-9]%',field1),  
  len(field1)-patinedx('%[0-9]%',field1)-patinedx('%[0-9]%',reverse(field1))+2)  
  as   int)>20Top

4 楼vinsonshen(为了明天)回复于 2004-12-04 13:40:28 得分 0

若数字字符串不是连续的,   而要取出里面的全部数字,则用循环去截取啦~~~Top

5 楼zhang_yzy(六子儿)回复于 2004-12-04 16:13:45 得分 0

select   *    
      from   (select   *    
                      from   table1    
                      where   upper(field1)   like   '%[^A..Z]%')   a  
      where   cast(field1   as   int)>20  
  注意:field1不能有非a-z,A-Z,0-9的字符  
  Top

6 楼lufree(荆州城公子三求计,博望坡军师初用兵)回复于 2004-12-05 01:41:01 得分 0

upTop

7 楼didoleo(冷月无声)回复于 2004-12-05 17:28:35 得分 0

赞同  
  yesyesyes()    
  vinsonshen(猪骨褒咸鱼->味道没得顶)    
   
  如果字符串中只有一个连续的整数数字子串,则  
  where   cast(substring  
  (field1,  
  patindex('%[0-9]%',field1),  
  len(field1)-patindex('%[0-9]%',field1)-patindex('%[0-9]%',reverse(field1))+2)  
  as   int)>20  
   
  --yesyesyes()   有个小笔误   patinedx   写成patinedxTop

8 楼didoleo(冷月无声)回复于 2004-12-05 17:43:54 得分 0

--若数字字符串不是连续的,   而要取出里面的全部数字,则用循环去截取啦~~~  
  declare   @number   varchar(1000)  
  declare   @mystring   varchar(1000)  
  select   @mystring='sdfaswa34sdfsf25143asdfsdf222asdfa'  
  set   @number=''  
  while   @mystring>''  
  begin  
   
                  if(left(@mystring,1)   like   '%[0-9]%')  
                  begin  
                        print   left(@mystring,1)  
                        set   @number=@number+left(@mystring,1)  
                  end  
                  set   @mystring=stuff(@mystring,1,1,'')  
  end  
  select   cast(@number   as   bigint)  
   
  --显示结果  
  3425143222  
  Top

9 楼didoleo(冷月无声)回复于 2004-12-05 22:08:57 得分 0

--建立个函数吧  
  create   function   f_didoleo(  
  @field1   varchar(8000)  
  )returns   bigint  
  as  
  begin  
  declare   @number   varchar(1000)  
  set   @number=''  
  while   @field1>''  
  begin  
   
                  if(left(@field1,1)   like   '%[0-9]%')  
                  begin  
                         
                        set   @number=@number+left(@field1,1)  
                  end  
                  set   @field1=stuff(@field1,1,1,'')  
  end  
  return(cast(@number   as   bigint))  
  end  
  go  
   
  --然后调用  
  select   *   from   table1   where   dbo.f_didoleo(field1)>20  
   
   
   
  Top

10 楼lufree(荆州城公子三求计,博望坡军师初用兵)回复于 2004-12-10 08:42:37 得分 0

upTop

相关问题

  • 在SQL查询语句中如何将数值型int转换为带千分号的varchar型?
  • ADO的SQL语句Create Table Test.dbf 产生数值字段的疑问?
  • sql语句:如何查询某列中最大的数值? 100的给
  • 求SQL语句 取出每天的这天最大的数值的记录。
  • sql语句:如何查询某列数值(int)按照数值的大小来排列?
  • 求SQL语句
  • sql语句。
  • sql语句?
  • sql 语句?
  • 求SQL语句

关键词

  • 数值
  • 字符
  • 数字
  • 数据
  • patinedx
  • field1
  • 字符串
  • 比较
  • 类型
  • patindex

得分解答快速导航

  • 帖主:lufree

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo