
# 函数
完整的分析语句语法如下：
```
SELECT [DISTINCT] (* | expression) [AS alias] [, ...]
[GROUP BY expression [, ...] [HAVING predicates]]
[ORDER BY expression [ASC | DESC] [, ...]]
[LIMIT size OFFSET offset]
```
本章节介绍函数。
#### 数学类
表1数学类 
| 函数       | 作用           | 定义                                                   | 示例                                        |
|:---|:---|:---|:---|
| abs      | 绝对值          | abs(number T) -\> T                                  | SELECT abs(0.5) LIMIT 1                   |
| add      | 加法           | add(number T, number) -\> T                          | SELECT add(1, 5) LIMIT 1                  |
| cbrt     | 立方根          | cbrt(number T) -\> T                                 | SELECT cbrt(0.5) LIMIT 1                  |
| ceil     | 向上取整         | ceil(number T) -\> T                                 | SELECT ceil(0.5) LIMIT 1                  |
| divide   | 除法           | divide(number T, number) -\> T                       | SELECT divide(1, 0.5) LIMIT 1             |
| e        | 自然底数 e       | e() -\> double                                       | SELECT e() LIMIT 1                        |
| exp      | 自然底数 e 的次幂   | exp(number T) -\> T                                  | SELECT exp(0.5) LIMIT 1                   |
| expm1    | 自然底数 e 的次幂减一 | expm1(number T) -\> T                                | SELECT expm1(0.5) LIMIT 1                 |
| floor    | 向下取整         | floor(number T) -\> T                                | SELECT floor(0.5) AS Rounded_Down LIMIT 1 |
| ln       | 自然对数         | ln(number T) -\> double                              | SELECT ln(10) LIMIT 1                     |
| log      | 以 T 为底数的对数   | log(number T, number) -\> double                     | SELECT log(10) LIMIT 1                    |
| log2     | 以 2 为底数的对数   | log2(number T) -\> double                            | SELECT log2(10) LIMIT 1                   |
| log10    | 以 10 为底数的对数  | log10(number T) -\> double                           | SELECT log10(10) LIMIT 1                  |
| modulus  | 取余           | modulus(number T, number) -\> T                      | SELECT modulus(2, 3) LIMIT 1              |
| multiply | 乘法           | multiply(number T, number) -\> number                | SELECT multiply(2, 3) LIMIT 1             |
| pi       | π            | pi() -\> double                                      | SELECT pi() LIMIT 1                       |
| pow      | T 的次幂        | pow(number T, number) -\> T                          | SELECT pow(2, 3) LIMIT 1                  |
| power    | T 的次幂        | power(number T) -\> T, power(number T, number) -\> T | SELECT power(2, 3) LIMIT 1                |
| rand     | 随机数          | rand() -\> number, rand(number T) -\> T              | SELECT rand(5) LIMIT 1                    |
| rint     | 舍弃小数         | rint(number T) -\> T                                 | SELECT rint(1.5) LIMIT 1                  |
| round    | 四舍五入         | round(number T) -\> T                                | SELECT round(1.5) LIMIT 1                 |
| sign     | 符号           | sign(number T) -\> T                                 | SELECT sign(1.5) LIMIT 1                  |
| signum   | 符号           | signum(number T) -\> T                               | SELECT signum(0.5) LIMIT 1                |
| sqrt     | 平方根          | sqrt(number T) -\> T                                 | SELECT sqrt(0.5) LIMIT 1                  |
| subtract | 减法           | subtract(number T, number) -\> T                     | SELECT subtract(3, 2) LIMIT 1             |
| /        | 除法           | number / number -\> number                           | SELECT 1 / 100 LIMIT 1                    |
| %        | 取余           | number % number -\> number                           | SELECT 1 % 100 LIMIT 1                    |
   
#### 三角函数
表2三角函数 
| 函数      | 作用              | 定义                                   | 示例                           |
|:---|:---|:---|:---|
| acos    | 反余弦             | acos(number T) -\> double            | SELECT acos(0.5) LIMIT 1     |
| asin    | 反正弦             | asin(number T) -\> double            | SELECT asin(0.5) LIMIT 1     |
| atan    | 反正切             | atan(number T) -\> double            | SELECT atan(0.5) LIMIT 1     |
| atan2   | T 和 U 相除的结果的反正切 | atan2(number T, number U) -\> double | SELECT atan2(1, 0.5) LIMIT 1 |
| cos     | 余弦              | cos(number T) -\> double             | SELECT cos(0.5) LIMIT 1      |
| cosh    | 双曲余弦            | cosh(number T) -\> double            | SELECT cosh(0.5) LIMIT 1     |
| cot     | 余切              | cot(number T) -\> double             | SELECT cot(0.5) LIMIT 1      |
| degrees | 弧度转换为度          | degrees(number T) -\> double         | SELECT degrees(0.5) LIMIT 1  |
| radians | 度转换为弧度          | radians(number T) -\> double         | SELECT radians(0.5) LIMIT 1  |
| sin     | 正弦              | sin(number T) -\> double             | SELECT sin(0.5) LIMIT 1      |
| sinh    | 双曲正弦            | sinh(number T) -\> double            | SELECT sinh(0.5) LIMIT 1     |
| tan     | 正切              | tan(number T) -\> double             | SELECT tan(0.5) LIMIT 1      |
   
#### 时间函数
表3时间函数 
| 函数               | 作用          | 定义                                           | 示例                                    |
|:---|:---|:---|:---|
| curdate          | 当前日期        | curdate() -\> date                           | SELECT curdate() LIMIT 1              |
| date             | 日期          | date(date) -\> date                          | SELECT date() LIMIT 1                 |
| date_format      | 根据格式获取对应日期值 | date_format(date, string) -\> string         | SELECT date_format(date, 'Y') LIMIT 1 |
| day_of_month     | 月份          | day_of_month(date) -\> integer               | SELECT day_of_month(date) LIMIT 1     |
| day_of_week      | 周几          | day_of_week(date) -\> integer                | SELECT day_of_week(date) LIMIT 1      |
| day_of_year      | 当年天数        | day_of_year(date) -\> integer                | SELECT day_of_year(date) LIMIT 1      |
| hour_of_day      | 当天小时数       | hour_of_day(date) -\> integer                | SELECT hour_of_day(date) LIMIT 1      |
| maketime         | 生成日期        | maketime(integer, integer, integer) -\> time | SELECT maketime(11, 30, 00) LIMIT 1   |
| minute_of_hour   | 当前小时分钟数     | minute_of_hour(date) -\> integer             | SELECT minute_of_hour(date) LIMIT 1   |
| minute_of_day    | 当天分钟数       | minute_of_day(date) -\> integer              | SELECT minute_of_day(date) LIMIT 1    |
| monthname        | 月份名称        | monthname(date) -\> string                   | SELECT monthname(date) LIMIT 1        |
| now              | 当前时间        | now() -\> time                               | SELECT now() LIMIT 1                  |
| second_of_minute | 秒数          | second_of_minute(date) -\> integer           | SELECT second_of_minute(date) LIMIT 1 |
| timestamp        | 日期          | timestamp(date) -\> date                     | SELECT timestamp(date) LIMIT 1        |
| year             | 年份          | year(date) -\> integer                       | SELECT year(date) LIMIT 1             |
   
#### 文本函数
表4文本函数 
| 函数        | 作用            | 定义                                              | 示例                                                      |
|:---|:---|:---|:---|
| ascii     | 第一个字符的ASCII 值 | ascii(string T) -\> integer                     | SELECT ascii('t') LIMIT 1                               |
| concat_ws | 连接字符串         | concat_ws(separator, string, string) -\> string | SELECT concat_ws('-', 'Tutorial', 'is', 'fun!') LIMIT 1 |
| left      | 从左往右取字符串      | left(string T, integer) -\> T                   | SELECT left('hello', 2) LIMIT 1                         |
| length    | 长度            | length(string) -\> integer                      | SELECT length('hello') LIMIT 1                          |
| locate    | 查找字符串         | locate(string, string) -\> integer              | SELECT locate('o', 'hello') LIMIT 1                     |
| replace   | 替换字符串         | replace(string T, string, string) -\> T         | SELECT replace('hello', 'l', 'x') LIMIT 1               |
| right     | 从右往左取字符串      | right(string T, integer) -\> T                  | SELECT right('hello', 1) LIMIT 1                        |
| rtrim     | 去除右侧空字符串      | rtrim(string T) -\> T                           | SELECT rtrim('hello ') LIMIT 1                          |
| substring | 取子字符串         | substring(string T, integer, integer) -\> T     | SELECT substring('hello', 2,5) LIMIT 1                  |
| trim      | 去除两侧空字符串      | trim(string T) -\> T                            | SELECT trim(' hello ') LIMIT 1                          |
| upper     | 全部转为大写        | upper(string T) -\> T                           | SELECT upper('helloworld') LIMIT 1                      |
   
#### 其他
表5其他 
| 函数     | 作用                  | 定义                                     | 示例                                                                                                                                                              |
|:---|:---|:---|:---|
| if     | if判断                | if(boolean, object, object) -\> object | SELECT if(false, 0, 1) LIMIT 1 , SELECT if(true, 0, 1) LIMIT 1    |
| ifnull | 字段为null时，填充默认值      | ifnull(object, object) -\> object      | SELECT ifnull('hello', 1) LIMIT 1 , SELECT ifnull(null, 1) LIMIT 1 |
| isnull | 字段是否为null，是返回1，否返回0 | isnull(object) -\> integer             | SELECT isnull(null) LIMIT 1 , SELECT isnull(1) LIMIT 1           |
   
