SQL文本字段的数字排序问题
作者:hayden 日期:2008-05-29
在一群里有朋友发问,有时间,也就看看了,不多说了,看图了:


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

后来想到了一个SQL:
程序代码
但不知道为什么,我这写的一个测试代码可以用,给朋友借鉴使用到他的程序上就出现数据类型不匹配的问题,几经测试,无果
在群里有一位朋友找到了一段资料,大家可以先看看:
引用内容
于是修改如下:
程序代码
至此:成功!
IIf条件判断,果然NB!


用一般的 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。
如果字段只包含数值,请考虑将字段的数据类型更改为“数字”或“货币”。
使用以下步骤,如果:
字段只包含数值,但您不希望更改字段的数据类型。
字段同时包含数值和字符串值,但您想在排序时忽略字符串值。
以下步骤将使用 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!
评论: 0 | 引用: 0 | 查看次数: -
发表评论

文章来自:
Tags: