0

对不起,如果标题有点模棱两可并且让人想起其他半相关的问题),这个问题实际上很简单。

我有一个 VARCHAR 列,它可以有 1 个字符的值,例如M,G,D and S. 如果我按字母顺序对结果进行排序,在此示例中它将按顺序显示它们:D-G-M-S. 但是,我需要按以下顺序显示行:

G-D-M-S

有没有办法在查询中完成这个?我知道我可以在 PHP 中对结果进行自定义排序,但如果可能的话,我宁愿在查询中进行。对于这个例子,我只需要在结果中切换“G”和“D”的顺序,这个简单问题的解决方案就足以满足任何答案。

4

4 回答 4

4

您可以编写自定义case语句:

Select *
from your_table
order by
   case your_column 
     when 'G' then 1
     when 'D' then 2
     when 'M' then 3
     when 'S' then 4
   end

另外,另一种解决方案是在物理级别更改排序规则:

通过向 8 位字符集添加简单排序规则来更改默认排序

于 2013-03-20T13:14:28.057 回答
1

我要做的是定义一个包含 2 列的临时表或永久表:

letter  |  ordernum
-------------------
G       |  1
D       |  2
M       |  3
S       |  4

然后,您将现有表连接到字段“letter”上的新表,并使用新表“ordernum”字段进行排序...

于 2013-03-20T13:14:32.940 回答
1
SELECT
    if(columnname='G',1,
        if(columnname='D',2,
            if(columnname='M',3,
                if(columnname='S',4,0
    )))) SortOrder
FROM tablename
ORDER BY
    SortOrder ASC
于 2013-03-20T13:14:43.923 回答
1
    Select col from table 
   order by case when col = 'G' then 1 
   when col = 'D' then 2
   when col = 'M' then 3 
   case when col = 'S' then 4 else 5 end ;
于 2013-03-20T13:15:40.393 回答