当字段长度变化101对1000时,无法以正确的顺序显示ColdFusion结果

时间:2015-03-05 21:22:21

标签: mysql sorting coldfusion sql-order-by

我正在使用MySQL。我有一个表名为UnitName的表。我只想按顺序显示所有UnitNames。单位名称可能有所不同:

101
T-101
G-202
1005
O-1305

当我使用ORDER BY UnitName显示它们时,结果未正确排序。例如1000将在101之前到来,T-2000将在T-201之前到来。如果它们都是数值,我会尝试使用CAST(UnitName AS INT),但不幸的是我必须处理Alpha(和其他' - ')字符。

我认为解决这个问题的方法是确保UnitNames具有相同的长度,然后它们将正确排序。所以基本上我试图在字符串的中间插入一些零,直到长度相同然后ORDER BY。

我的查询目前列在下面。

<cfquery name="Get"datasource="rent">
    SELECT * FROM Units
     ORDER BY Left(UnitName,2)+#RepeatString(0, 10-'LEN(UnitName)')#+right(UnitName, 'LEN(UnitName)'-2)   
</CFQUERY>

我基本上是说“字符串的左边2个字符+(由数字10确定的0个数减去字符串的长度)+字符串右边的字符(前2个字符除外) )。

当我只做一个这样的CFOUTPUT时,UnitName就完美了。我必须有一些#才能使它工作:#Left(UnitName,2)## RepeatString(0,10 - '#LEN(UnitName)#')## right(UnitName,len(UnitName)-2)#

但查询无法执行如下所示。我把它缩小到中间部分,我试图确定要插入的零的数量。特别是如果我使用:

#RepeatString(0, 10-5)#,查询将执行。但是当我把'LEN(UnitName)'代替5时,查询失败了。知道我做错了吗?

感谢任何见解 - 我一直在撞墙。

0 个答案:

没有答案