# 第118章 SQL函数 REVERSE 标量字符串函数,它以相反的字符顺序返回一个字符串。 # 大纲 ```java REVERSE(string-expression) ``` # 参数 - `string-expression` - 要反转的字符串表达式。表达式可以是列名、字符串文字、数字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 `CHAR` 或 `VARCHAR`)。 # 描述 REVERSE 返回字符顺序颠倒的字符串表达式。例如 `'Hello World!'` 返回为 `'!dlroW olleH'`。这是一个简单的字符串顺序反转,没有额外的处理。 返回的字符串是数据类型 `VARCHAR`,与输入值的数据类型无关。数字转换为规范形式,数字字符串在反转之前不会转换为规范形式。 前导和尾随空白不受反转的影响。 反转 `NULL` 值会导致 `NULL`。 注意:因为 `REVERSE` 总是返回一个 `VARCHAR` 字符串,所以某些类型的数据在反转时会变得无效: - 反向列表不再是有效列表,无法从存储格式转换为显示格式。 - 反转日期不再是有效日期,并且无法从存储格式转换为显示格式。 # 示例 以下示例反转 `Name` 字段值。在这种情况下,这会导致名称按中间名首字母排序: ```sql SELECT Name,REVERSE(Name) AS RevName FROM Sample.Person ORDER BY RevName ``` 请注意,因为 `Name` 和 `RevName` 只是同一字段的不同表示,所以 `ORDER BY RevName` 和 `ORDER BY RevName,Name` 执行相同的排序。 以下示例反转数字和数字字符串: ```sql SELECT REVERSE(+007.10) AS RevNum, REVERSE('+007.10') AS RevNumStr 1.7 01.700+ ``` 以下嵌入式 SQL 示例反转 `$DOUBLE` 数字: ```java /// d ##class(PHA.TEST.SQLFunction).Reverse() ClassMethod Reverse() { s dnum = $DOUBLE(1.1) &sql( SELECT REVERSE(:dnum) INTO :drevnum ) w dnum,! w drevnum,! } ``` ```java DHC-APP> d ##class(PHA.TEST.SQLFunction).Reverse() 1.1000000000000000888 8880000000000000001.1 ``` 以下示例显示了反转列表时发生的情况: ```sql SELECT FavoriteColors,REVERSE(FavoriteColors) AS RevColors FROM Sample.Person ``` 以下示例显示了反转日期时发生的情况: ```sql SELECT DOB,%INTERNAL(DOB) AS IntDOB,REVERSE(DOB) AS RevDOB FROM Sample.Person ```