我有一个表定义如下:
CREATE TABLE bar_table (
_id INTEGER NOT NULL PRIMARY KEY,
index INTEGER NOT NULL DEFAULT '65535',
_date DATE
)
Run Code Online (Sandbox Code Playgroud)
我的基本选择陈述是:
SELECT * FROM bar_table ORDER BY <your-clause-here>
Run Code Online (Sandbox Code Playgroud)
如何通过索引升序和日期降序来命令我的选择?即小指数在大指数之前出现.如果两个索引相同,则较晚的日期将首先出现.
文档指向我的COLLATion,但我不确定那是什么.
Eri*_*ric 21
虽然我知道你已经在这里有了自己的答案,但我认为在这里详细介绍这些细节是相关的.
首先,该order by
子句按指定的列或表达式的顺序排列.在这种情况下:
order by index asc, _date desc
Run Code Online (Sandbox Code Playgroud)
从index
最小到最大(asc
结束),然后从 _date
最大到最小(desc
结束)排序.虽然asc
是默认值,但是当我有多个列朝向相反方向时,我通常会将其包含在内,就像您在此处所做的那样.
您还可以在order by
以下内容中包含表达式:
order by case when index < 0 then 1 else 0 end desc, _date desc
Run Code Online (Sandbox Code Playgroud)
这会将所有负面index
行放在顶部,然后对它们进行排序_date
.order by
在某些情况下,在子句中使用表达式非常有效.
现在,你提到了整理,并对这是什么有点困惑.排序规则是数据库如何在字符串比较中处理大写和重音.使用Captial-Sensitive整理,'abc' != 'ABC'
.但是,使用Captial-Insensitive排序规则,'abc' = 'ABC'
.
应该注意,校对不是字符集.这通常由数据类型(varchar
== ASCII,nvarchar
== Unicode)决定.排序规则确定如何比较字符串,而不是可以使用的字符集.
此外,整理对某些语言也很重要.鉴于拉丁文整理,你只需要担心大写和口音,但是考虑到丹麦的整理, 'aa' = 'å'
.1因此,您可以看到整理在确定不同语言的排序和比较中起着重要作用.
排序时排序非常重要,因为它决定了在给定不同大写和重音的情况下如何排序字符串.这就是为什么它一直在你的搜索中出现.整理很重要,本周它甚至影响了StackOverflow!
1 :感谢迈克尔·马德森指出这个具体的例子.