在SQLite不同方向的不同列在不同的列中ORDER BY
技术问答
205 人阅读
|
0 人回复
|
2023-09-14
|
我有一个定义如下的表:
?4 C; u) o7 F/ T5 x' F* ^1 O CREATE TABLE bar_table ( _id INTEGER NOT NULL PRIMARY KEY, index INTEGER NOT NULL DEFAULT _date DATE )我的基本选择是:& g. \* f$ r: K1 O8 i
SELECT * FROM bar_table ORDER BY 如何根据索引升序和日期降序对选择进行排序?也就是说,小索引先于大索引。如果两个索引相同,则以较晚的日期为准。4 Q% e& \8 c; v" }3 k
文件指向我COLLATion,但是我不确定那是什么。1 ]8 @4 W8 i% X
: i9 F+ M. @! g, x* q1 v 解决方案:
4 o( q! v3 s: j/ R& M* Z 虽然我知道你在这里有自己的答案,但我认为在这里工作的细节很重要。/ e, r* a5 w+ b3 W) G
首先,该order by子句按指定的列或表达式顺序排列。在这种情况下:5 H o* o2 I6 \
order by index asc,_date descindex从小到大(asc结尾),然后( e& X' k2 o% M- |
_date从大到小(desc尽管如此asc它是默认值,但当我有多个列的相反方向时,它通常包括在内,就像你在这里所做的那样。
; R" D! l6 }2 ~- t; F O您还可以在order by表达式包括以下内容:6 J7 j$ b9 S# }; B3 U
order by case when index 所有这些都将被否定index放在顶部,然后按顺序排序_date。order by在某些情况下,在子句中使用表达式是非常有效的。
; S/ ]5 g2 h- s$ r* R现在,你提到了collation,还有一些关于它的困惑。排序规则是数据库如何处理字符串比较中的大写字母和重音符号。使用大小写敏感的排序规则,‘abc'!= 'ABC但是,对于不区分大小写的排序规则,‘abc' = 'ABC'。
% Z* u* _ j, s: {应注意的是, 的分类不是 字符集通常由数据类型决定(varchar== ASCII,nvarchar==8 }5 I3 k% H) P! Y2 V
Unicode)。排序规则决定了如何比较字符串,而不是确定可以使用哪些字符集。
0 L$ f7 k" b0 u7 ?+ \此外,对于某些语言来说,排名规则也很重要。给定拉丁语排名规则,你只需要担心大小写和重音符号,但考虑到丹麦语的排名规则,‘aa' =因此,你可以看到排序规则在确定不同语言的排序和比较中也起着很大的作用。; s$ c. ?) ^* d: {% A- S% o; S
排序规则非常重要,因为它决定了如何在给定大写字母和重音符号时对字符串进行排序。这就是为什么它继续出现在你的搜索中。整理非常重要,它甚至影响了本周StackOverflow!
- V, T7 b3 u: p! z! s1 :感谢Michael Madsen具体示例指出。 |
|
|
|
|
|