我有一些示例数据。
这里是按逻辑顺序
createDate
的第一笔订单col1
进行的第二次排序包含单词 Tom 需要大写和小写col2
的三阶命令不区分大小写样本数据:
| col1 | col2 | createDate |
+--------+-------------+----------------------+
| S Amy | Apple pie | 2018-06-19T00:00:00Z |
| U Tom | Apple pie | 2018-06-19T00:00:00Z |
| kevin | banana pie | 2018-06-18T00:00:00Z |
| U tOm | Apple pie | 2018-06-19T00:00:00Z |
| k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly | Apple pie | 2018-06-18T00:00:00Z |
| Tom | banana pie | 2018-06-19T00:00:00Z |
示例数据sqlfiddle:http://sqlfiddle.com/#!18/6c729/1
我已经尝试过此查询。我不知道要达到预期的结果。
SELECT *
FROM myTable
ORDER BY createDate DESC
当前结果:
| col1 | col2 | createDate |
+--------+-------------+----------------------+
| S Amy | Apple pie | 2018-06-19T00:00:00Z |
| U Tom | Apple pie | 2018-06-19T00:00:00Z |
| U tOm | Apple pie | 2018-06-19T00:00:00Z |
| Tom | banana pie | 2018-06-19T00:00:00Z |
| k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly | Apple pie | 2018-06-18T00:00:00Z |
| kevin | banana pie | 2018-06-18T00:00:00Z |
我不知道该怎么做第二和第三条件。
我的预期结果:
| col1 | col2 | createDate |
+--------+-------------+----------------------+
| U Tom | Apple pie | 2018-06-19T00:00:00Z |
| Tom | banana pie | 2018-06-19T00:00:00Z |
| S Amy | Apple pie | 2018-06-19T00:00:00Z |
| U tOm | Apple pie | 2018-06-19T00:00:00Z |
| k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly | Apple pie | 2018-06-18T00:00:00Z |
| kevin | banana pie | 2018-06-18T00:00:00Z |
任何帮助将不胜感激。
答案 0 :(得分:5)
您可以尝试在CASE WHEN
上使用ORDER BY
看起来像这样。
SELECT *
FROM myTable
ORDER BY
createDate DESC,
CASE
WHEN col1 collate Chinese_PRC_CS_AS like '%Tom%' THEN 2
WHEN col2 like '%apple%' THEN 1
ELSE 0
END DESC
注意:
collate Chinese_PRC_CS_AS
区分大小写sqlfiddle:http://sqlfiddle.com/#!18/66fd1/2
结果:
| col1 | col2 | createDate |
|--------|-------------|----------------------|
| U Tom | Apple pie | 2018-06-19T00:00:00Z |
| Tom | banana pie | 2018-06-19T00:00:00Z |
| S Amy | Apple pie | 2018-06-19T00:00:00Z |
| U tOm | Apple pie | 2018-06-19T00:00:00Z |
| k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly | Apple pie | 2018-06-18T00:00:00Z |
| kevin | banana pie | 2018-06-18T00:00:00Z |
答案 1 :(得分:1)
根据您的问题,一个简单的答案应该是:
SELECT *
FROM myTable
ORDER BY createDate DESC, col1 , upper(col2)
其中upper(col2)
允许排序不区分大小写
...但是仅当您的数据以不区分大小写的排序规则存储时才是错误的,例如sql_latin1_general_cp1_ci_as
一个更通用的答案是:
SELECT *
FROM myTable
ORDER BY createDate DESC
, col1 COLLATE Latin1_General_BIN
, col2 COLLATE sql_latin1_general_cp1_ci_as
=> col1 COLLATE Latin1_General_BIN确保区分大小写的“ col1”
=> col2 COLLATE sql_latin1_general_cp1_ci_as确保不区分大小写的“ col2”