如何在 SQL 语句中进行排序,同时赋予数字低于字符的值?
例如:
- “iPad Wi-Fi”应该出现在“iPad 2 Wi-Fi”之前
- “iPad 2 Wi-Fi”应该出现在“iPad 3 Wi-Fi”之前
- “iPad 3 Wi-Fi”应该出现在“iPhone”之前
- “iPhone”应该出现在“iPhone 2”之前
可能最简单的方法是有一个单独的列,您可以按照您想要的排序方式填充该列。
然后通过确保它由插入/更新触发器设置来确保它保持一致。
通过在插入/更新时使用单独的列集,您可以保证仅在需要时才计算此订单的成本,而不是每次您select
. DBA 通常会牺牲空间来获得更多时间。
并且触发器的使用保持了 ACID 属性。
select *
from your_table
order by
replace(replace(replace(replace(replace(name, '9', '0'), '8', '1'), '7', '2'), '6', '3'), '5', '4') asc