SQL文本字段的数字排序问题

作者:hayden 来源:烦恼's BLOG 时间:2008-11-18 16:47:00 

 在一群里有朋友发问,有时间,也就看看了,不多说了,看图了:

用一般的 select .... order 排序出来,就如下图了,是按第一位数字排序的,无法达到目的

后来想到了一个SQL:

 Select ss FROM sa order by ss*1

但不知道为什么,我这写的一个测试代码可以用,给朋友借鉴使用到他的程序上就出现数据类型不匹配的问题,几经测试,无果


在群里有一位朋友找到了一段资料,大家可以先看看:

若要确保学号基于其数值而不是按字母次序进行排序,请执行下列某项操作:

如果字段只包含数值,请考虑将字段的数据类型更改为“数字”或“货币”。 
使用以下步骤,如果:
字段只包含数值,但您不希望更改字段的数据类型。 
字段同时包含数值和字符串值,但您想在排序时忽略字符串值。 

以下步骤将使用 Val 函数来获取作为文本存储的数字的数值。该表达式还使用 IIf 函数来处理可能出现在排序字段中的 Null 值。

在“开始”选项卡上的“排序和筛选”组中,单击“高级”,然后单击快捷菜单上的“高级筛选/排序”。 
在第一列中的“字段”行内键入表达式“Expr1: IIf([Fieldname] Is Null, 0, Val([Fieldname]))”。 
IIf 函数将检查字段值是否是 Null,如果是,则将它视为 0。如果值不是 Null,IIf 函数将调用 Val 函数来获取等价的数值。

在“排序”单元中,选择“升序”或“降序”。 
升序排序将在顶部显示具有最小值的记录,在底部显示具有最大值的记录。降序排序则相反。

在“开始”选项卡上的“排序和筛选”组中,单击“切换筛选”。 
如果上述步骤不适合于您,您可以尝试用另一个途径来避免更改表的结构。这包括使用前导零来“填充”位数较少的值。例如,在应用排序之前,将值 11、2、2000 和 3 更改为 0011、0002、2000 和 0003。

于是修改如下:

Select ss FROM sa order by IIf([ss] Is Null, 0, Val([ss]))

至此:成功!

IIf条件判断,果然NB!

标签:排序,sql,文本,字段
0
投稿

猜你喜欢

  • Oracle 异构服务实践

    2007-08-17 10:00:00
  • 阿里巴巴中秋节logo设计的艰辛曲折过程

    2008-09-11 17:15:00
  • ACCESS中Field对象的标题属性

    2008-11-20 17:44:00
  • mysql: 安装后的目录结构

    2011-03-08 09:46:00
  • MSSQL中部分字段重复数据的删除方法

    2008-12-29 13:59:00
  • msxml3.dll (0x80070005)拒绝访问 解决方法

    2010-03-11 21:26:00
  • XMLHTTP 使用代理获取数据asp代码

    2010-03-22 14:40:00
  • 如何根据用户银行帐户余额的多少进行显式的提交或终止?

    2009-11-22 19:28:00
  • 解析xml字符串的函数

    2008-06-10 12:37:00
  • 编写SQL需要注意的细节Checklist总结

    2012-10-07 10:43:57
  • 一段有趣的js代码的研究

    2008-04-29 21:47:00
  • 利用ASP发送和接收XML数据的处理方法

    2009-02-02 08:57:00
  • [翻译]标记语言和样式手册 Chapter 11 打印样式

    2008-02-11 18:44:00
  • 如何将txt文本中的数据轻松导入MySQL表中

    2009-03-06 17:35:00
  • asp中把数据表映射成ajax可调用的json格式的方法

    2010-01-22 15:27:00
  • 从语义开始–概念、意义、实践

    2010-06-13 18:06:00
  • 发个js从样式表取值的函数

    2008-05-20 12:23:00
  • 用 JS 来控制 target 链接属性

    2007-10-08 12:59:00
  • asp日期转换成汉字格式程序

    2008-07-08 18:19:00
  • FileSystem对象常用的文件操作函数有哪些?

    2009-11-01 15:11:00
  • asp之家 网络编程 m.aspxhome.com