[QDB] QDataSet 的排序表达式详解

QDataSet 支持通过设置 Sort 属性指定排序规则,它支持的基本语法格式为:

字段名1 [ASC|IASC|NASC|NIASC|DESC|IDESC|NDESC|NIDESC][[,|;] 字段名2…]

字段名后面的排序顺序关键词可以省略,如果省略则按升序区分大小写排序,而这些关键词本身不区分大小写,也就是说 ASC 和 asc/Asc/aSc 都是等价的。

  • ASC : 升序,如果是字符串类型,则区分大小写
  • IASC : 升序,如果是字符串类型,则忽略大小写,如果不是字符串类型,则等价于 ASC
  • NASC :  升序,如果是字符串类型,按自然语言规则排序,如果不是字符串类型,则等价于 ASC
  • NIASC :升序,如果是字符串类型,按自然语言规则排序并忽略大小写,如果不是字符串类型,则等价于 ASC
  • DESC : 降序,如果是字符串类型,则区分大小写
  • IDESC : 降序,如果是字符串类型,则忽略大小写,如果不是字符串类型,则等价于 DESC
  • NDESC : 降序,如果是字符串类型,则自然语言规则排序,如果不是字符串类型,则等价于 DESC
  • NIDESC : 降序,如果是字符串类型,则自然语言规则排序并忽略大小写,如果不是字符串类型,则等价于 DESC

关于自然语言排序规则,可以参考文章:按自然语言规则进行字符串排序.

多个字段组合排序时,中间可以用半角的 “,”  或 “;” 分隔,下面举几个简单的例子,假设 TQDataSet 类型的实例名为 ADataSet,字段有 Id、Name、Age:

1、按Id升序排序

【Delphi】

ADataSet.Sort:='Id';

【C++ Builder】

ADataSet->Sort=L"Id";

2、按 Age 升序,按 Name 降序排列

【Delphi】

ADataSet.Sort:='Age,Name DESC'

【C++ Builder】

ADataSet->Sort=L"Age,Name DESC"

 

分享到: