如果标题有点含糊不清并让人联想到其他半相关问题,我们很抱歉,问题实际上非常简单。
我有一个VARCHAR列,它可以包含1个字符的值,例如M,G,D and S
。如果我按字母顺序对结果进行排序,则在此示例中,它将按顺序显示它们:D-G-M-S
。但是,我需要按以下顺序显示行:
G-D-M-S
有没有办法在查询中完成此操作?我知道我可以在PHP中对结果进行自定义排序,但如果可能的话,我宁愿在查询中执行此操作。对于这个例子,我只需要在结果中切换“G”和“D”的顺序,这个简单问题的解决方案就足以满足任何答案。
答案 0 :(得分: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
另外,另一种解决方案是在物理层面改变整理:
Change default Sorting by Adding a Simple Collation to an 8-Bit Character Set
答案 1 :(得分:1)
我要做的是定义一个包含2列的临时表或永久表:
letter | ordernum
-------------------
G | 1
D | 2
M | 3
S | 4
然后你将你现有的表加入到字母“letter”上的新表中,并使用新表“ordernum”字段进行排序......
答案 2 :(得分: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
答案 3 :(得分: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 ;