# 第七十四章 SQL函数 LEAST 从一系列表达式中返回最小值的函数。 # 大纲 ``` LEAST(expression,expression[,...]) ``` # 参数 - `expression` - 解析为数字或字符串的表达式。 将这些表达式的值相互比较,并返回最小值。 表达式可以是字段名、文字、算术表达式、主机变量或对象引用。 最多可以列出`140`个逗号分隔的表达式。 # 描述 `LEAST`从逗号分隔的表达式序列中返回最小值。 表达式按从左到右的顺序求值。 如果只提供一个表达式,则`LEAST`返回该值。 如果任何表达式为`NULL`, `LEAST`返回`NULL`。 如果所有表达式值都解析为规范数,则按数值顺序对它们进行比较。 如果引用的字符串包含规范格式的数字,则按数字顺序对其进行比较。 但是,如果引用的字符串包含非规范格式的数字(例如,`'00'`、`'0.4'`或`'+4'`),则将其作为字符串进行比较。 字符串比较按排序顺序逐字符执行。 任何字符串值都大于任何数字值。 空字符串大于任何数字值,但小于任何其他字符串值。 如果返回值是一个数字,`LEAST`将以规范格式返回它(删除前导和末尾的零,等等)。 如果返回值是一个字符串,`LEAST`将不改变返回值,包括任何开头或结尾的空格。 `LEAST`返回逗号分隔的一系列表达式中的最小值。 `GREATEST`返回逗号分隔的一系列表达式中的最大值。 `COALESCE`返回逗号分隔的一系列表达式中的第一个非`null`值。 # 返回值数据类型 如果表达式值的数据类型不同,则返回的数据类型是与所有可能的返回值最兼容的类型,具有最高数据类型优先级的数据类型。 例如,如果一个表达式是整数,而另一个表达式是小数,则`LEAST`返回数据类型`NUMERIC`的值。 这是因为`NUMERIC`是具有最高优先级的数据类型,并且与两者兼容。 但是,如果表达式是文字数字或字符串,则`LEAST`返回数据类型`VARCHAR`。 # 示例 在下面的例子中,每个`LEAST`比较三个正则数: ```sql SELECT LEAST(22,2.2,-21) AS HighNum, LEAST('2.2','22','-21') AS HighNumStr -21 -21 ``` 在下面的例子中,每个`LEAST`比较三个数字字符串。 然而,每个`LEAST`包含一个非规范字符串; 这些非规范值将作为字符串进行比较。 字符串总是大于数字: ```sql SELECT LEAST('22','+2.2','21'), LEAST('0.2','22','21') 21 21 ``` 在下面的例子中,每个`LEAST`都会比较三个字符串,并返回排序序列最低的值: ```sql SELECT LEAST('A','a',''), LEAST('a','aa','abc'), LEAST('#','0','7'), LEAST('##','00','77') a 0 77 ``` 下面的例子比较了两个被视为标准数字的日期:作为`$HOROLOG`整数的出生日期和转换为日期的`58074`整数。 它返回每个在`20`世纪出生的人的出生日期。 任何在`1999年12月31日`之后出生的人都会显示默认的出生日期为`2000年1月1日`: ```sql SELECT Name,LEAST(DOB,TO_DATE(58074)) AS NewMillenium FROM Sample.Person ``` ![image](792AA862F12A475B820DEF99233715EA)