我正在使用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时,查询失败了。知道我做错了吗?
感谢任何见解 - 我一直在撞墙。