2015-05-09 90 views
2

我有一个SQL数据库,我打电话通过一个PHP文件。该列可以包含数字和单词。例如,它可以countain:SQL - 命令混合的数字和字

1 
4 
clowns 
12 
46 

当然,ORDER BY回报:

1 
12 
4 
46 
clowns 

,但我想它进行排序如何将整数与分类编号:

1 
4 
12 
46 
clowns 

是有可能做到这一点?

+0

看到一个自定义函数http://stackoverflow.com/questions/153633/natural-sort-in-mysql – bruchowski

+0

取决于使用的dbms。一些dbms产品与数字排序有整理。 – jarlh

回答

3

添加一些新的列来解决这个问题,首先通过是否它是一个数字,然后由数字值,最后按字的值按字母顺序。

在MSSQL中,您可以访问isnumeric函数。
在Oracle,你可以创建一个使用THIS
MySQL中的自定义功能,你可以创建一个使用THIS

select your_column from(
select *, 
isnumeric(your_column) as ISNUMBER, 
CASE WHEN ISNUMERIC(your_column) = 1 THEN CAST(your_column AS INT) ELSE null END as NUMBERVALUE, 
case when isnumeric(your_column) = 1 then null else your_column end as TEXTVALUE) 
order by isnumber desc, numbervalue asc, textvalue asc 
... 
+0

将其更新为先查询新列,然后对它们进行订购 – Brino

+0

请指定适用于哪些dbms。 (ISNUMERIC是产品特定功能。) – jarlh

+0

@jarlh查看更新的答案 – Brino