3038 lines
63 KiB
Markdown
3038 lines
63 KiB
Markdown
函数
|
|
=======================
|
|
|
|
|
|
|
|
日期时间函数
|
|
---------------
|
|
|
|
日期时间函数主要用来显示有关日期和时间的信息。
|
|
|
|
#### CURDATE
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CURDATE()
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回当前日期,不含时间部分。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT CURDATE();
|
|
+------------+
|
|
| CURDATE() |
|
|
+------------+
|
|
| 2018-05-05 |
|
|
+------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### CURRENT_DATE
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CURRENT_DATE()
|
|
CURRENT_DATE
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
同 `CURDATE()`。
|
|
|
|
|
|
|
|
#### CURRENT_TIME
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CURRENT_TIME([scale])
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回当前时间,不含日期部分。
|
|
|
|
`scale` 有效值为 0 到 6,表示微秒部分精度,默认值为 0。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT CURRENT_TIME(6);
|
|
+-----------------+
|
|
| CURRENT_TIME(6) |
|
|
+-----------------+
|
|
| 11:11:45.215311 |
|
|
+-----------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### CURRENT_TIMESTAMP
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CURRENT_TIMESTAMP([scale])
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回当前日期时间,考虑时区设置。
|
|
|
|
`scale` 有效值为 0 到 6,表示微秒部分精度,默认值为 0。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT CURRENT_TIMESTAMP(6);
|
|
+----------------------------+
|
|
| CURRENT_TIMESTAMP(6) |
|
|
+----------------------------+
|
|
| 2018-05-05 11:35:39.177764 |
|
|
+----------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### CURTIME
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CURTIME()
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
同 `CURRENT_TIME()`。
|
|
|
|
|
|
|
|
#### DATE_ADD
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
DATE_ADD(date, INTERVAL expr unit)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
日期时间的算术计算。
|
|
|
|
* `date` 表示日期时间基准,日期部分必选,时间部分可选。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* `expr` 表示时间间隔,可以为负值。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* `unit` 表示时间间隔单位。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以下为所有时间间隔单位列表:
|
|
|
|
|
|
| 单位 | 类型 | 含义 | 格式 |
|
|
|----------------------|----|-------|----------------------------------------|
|
|
| `MICROSECOND` | 独立 | 微秒 | `MICROSECONDS` |
|
|
| `SECOND` | 独立 | 秒 | `SECONDS` |
|
|
| `MINUTE` | 独立 | 分钟 | `MINUTES` |
|
|
| `HOUR` | 独立 | 小时 | `HOURS` |
|
|
| `DAY` | 独立 | 天 | `DAYS` |
|
|
| `WEEK` | 独立 | 周 | `WEEKS` |
|
|
| `MONTH` | 独立 | 月 | `MONTHS` |
|
|
| `QUARTER` | 独立 | 季度 | `QUARTERS` |
|
|
| `YEAR` | 独立 | 年 | `YEARS` |
|
|
| `SECOND_MICROSECOND` | 组合 | 秒到微秒 | `'SECONDS.MICROSECONDS'` |
|
|
| `MINUTE_MICROSECOND` | 组合 | 分钟到微秒 | `'MINUTES:SECONDS.MICROSECONDS'` |
|
|
| `MINUTE_SECOND` | 组合 | 分钟到秒 | `'MINUTES:SECONDS'` |
|
|
| `HOUR_MICROSECOND` | 组合 | 小时到微秒 | `'HOURS:MINUTES:SECONDS.MICROSECONDS'` |
|
|
| `HOUR_SECOND` | 组合 | 小时到秒 | `'HOURS:MINUTES:SECONDS'` |
|
|
| `HOUR_MINUTE` | 组合 | 小时到分钟 | `'HOURS:MINUTES'` |
|
|
| `DAY_SECOND` | 组合 | 天到秒 | `'DAYS HOURS:MINUTES:SECONDS'` |
|
|
| `DAY_MINUTE` | 组合 | 天到分钟 | `'DDAYSD HOURS:MINUTES'` |
|
|
| `DAY_HOUR` | 组合 | 天到小时 | `'DAYS HOURS'` |
|
|
| `YEAR_MONTH` | 组合 | 年到月 | `'YEARS-MONTHS'` |
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> DATE_ADD(NOW(), INTERVAL 5 DAY),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 MICROSECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 SECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 MINUTE),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 HOUR),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 DAY),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 WEEK),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 MONTH),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 QUARTER),
|
|
-> DATE_ADD('2014-01-10', INTERVAL 5 YEAR),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '5.000005' SECOND_MICROSECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '05:05.000005' MINUTE_MICROSECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '05:05' MINUTE_SECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '05:05:05' HOUR_SECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '05:05' HOUR_MINUTE),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '01 05:05:05.000005' DAY_MICROSECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '01 05:05:05' DAY_SECOND),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '01 05:05' DAY_MINUTE),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '01 05' DAY_HOUR),
|
|
-> DATE_ADD('2014-01-10', INTERVAL '1-01' YEAR_MONTH)
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
DATE_ADD(NOW(), INTERVAL 5 DAY): 2018-05-10 14:54:52
|
|
DATE_ADD('2014-01-10', INTERVAL 5 MICROSECOND): 2014-01-10 00:00:00.000005
|
|
DATE_ADD('2014-01-10', INTERVAL 5 SECOND): 2014-01-10 00:00:05
|
|
DATE_ADD('2014-01-10', INTERVAL 5 MINUTE): 2014-01-10 00:05:00
|
|
DATE_ADD('2014-01-10', INTERVAL 5 HOUR): 2014-01-10 05:00:00
|
|
DATE_ADD('2014-01-10', INTERVAL 5 DAY): 2014-01-15
|
|
DATE_ADD('2014-01-10', INTERVAL 5 WEEK): 2014-02-14
|
|
DATE_ADD('2014-01-10', INTERVAL 5 MONTH): 2014-06-10
|
|
DATE_ADD('2014-01-10', INTERVAL 5 QUARTER): 2015-04-10
|
|
DATE_ADD('2014-01-10', INTERVAL 5 YEAR): 2019-01-10
|
|
DATE_ADD('2014-01-10', INTERVAL '5.000005' SECOND_MICROSECOND): 2014-01-10 00:00:05.000005
|
|
DATE_ADD('2014-01-10', INTERVAL '05:05.000005' MINUTE_MICROSECOND): 2014-01-10 00:05:05.000005
|
|
DATE_ADD('2014-01-10', INTERVAL '05:05' MINUTE_SECOND): 2014-01-10 00:05:05
|
|
DATE_ADD('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND): 2014-01-10 05:05:05.000005
|
|
DATE_ADD('2014-01-10', INTERVAL '05:05:05' HOUR_SECOND): 2014-01-10 05:05:05
|
|
DATE_ADD('2014-01-10', INTERVAL '05:05' HOUR_MINUTE): 2014-01-10 05:05:00
|
|
DATE_ADD('2014-01-10', INTERVAL '01 05:05:05.000005' DAY_MICROSECOND): 2014-01-11 05:05:05.000005
|
|
DATE_ADD('2014-01-10', INTERVAL '01 05:05:05' DAY_SECOND): 2014-01-11 05:05:05
|
|
DATE_ADD('2014-01-10', INTERVAL '01 05:05' DAY_MINUTE): 2014-01-11 05:05:00
|
|
DATE_ADD('2014-01-10', INTERVAL '01 05' DAY_HOUR): 2014-01-11 05:00:00
|
|
DATE_ADD('2014-01-10', INTERVAL '1-01' YEAR_MONTH): 2015-02-10
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### DATE_FORMAT
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
DATE_FORMAT(date, format)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将日期时间以指定格式输出。
|
|
|
|
* `date` 表示日期时间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* `format` 表示输出格式。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以下为所有输出格式列表:
|
|
|
|
|
|
| 格式符 | 含义 | 格式 |
|
|
|------|------------------------------|------------------------|
|
|
| `%a` | 星期的英文缩写。 | `Sun..Sat` |
|
|
| `%b` | 月份的英文缩写。 | `Jan..Dec` |
|
|
| `%c` | 月份的数字形式。 | `1..12` |
|
|
| `%D` | 日的英文缩写。 | `1st..31st` |
|
|
| `%d` | 日的数字形式。 | `01..31` |
|
|
| `%e` | 日的数字形式。 | `1.. 31` |
|
|
| `%f` | 微秒。 | `000000..999999` |
|
|
| `%H` | 小时。 | `00..23` |
|
|
| `%h` | 小时。 | `01..12` |
|
|
| `%I` | 小时。 | `01..12` |
|
|
| `%i` | 分钟。 | `00..59` |
|
|
| `%j` | 一年中的第几天。 | `001..366` |
|
|
| `%k` | 小时。 | `0..23` |
|
|
| `%l` | 小时。 | `0..12` |
|
|
| `%M` | 月份的英文名称。 | `January..December` |
|
|
| `%m` | 月份的数字形式。 | `01..12` |
|
|
| `%p` | 上午或下午。 | `AM/PM` |
|
|
| `%r` | 12小时制时间。 | `hh:mm:ss AM/PM` |
|
|
| `%S` | 秒。 | `00..59` |
|
|
| `%s` | 秒。 | `00..59` |
|
|
| `%T` | 24小时制时间。 | `hh:mm:ss` |
|
|
| `%U` | 一年中的第几周,周日为每周第一天。 | `00..53` |
|
|
| `%u` | 一年中的第几周,周一为每周第一天。 | `00..53` |
|
|
| `%V` | 一年中的第几周,周日为每周第一天(和`%X`同时使用)。 | `01..53` |
|
|
| `%v` | 一年中的第几周,周一为每周第一天(和`%x`同时使用)。 | `01..53` |
|
|
| `%W` | 星期的英文名称。 | `Sunday..Saturday` |
|
|
| `%w` | 一周中的第几天。 | `0=Sunday..6=Saturday` |
|
|
| `%X` | 一周所属的年份,周日为每周第一天(和`%V`同时使用)。 | |
|
|
| `%x` | 一周所属的年份,周一为每周第一天(和`%v`同时使用)。 | |
|
|
| `%Y` | 四位年份。 | |
|
|
| `%y` | 两位年份。 | |
|
|
| `%%` | 文字字符,输出一个`%`。 | |
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> DATE_FORMAT('2014-01-01', '%Y-%M-%d'),
|
|
-> DATE_FORMAT('2014-01-01', '%X-%V'),
|
|
-> DATE_FORMAT('2014-01-01', '%U')
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
DATE_FORMAT('2014-01-01', '%Y-%M-%d'): 2014-January-01
|
|
DATE_FORMAT('2014-01-01', '%X-%V'): 2013-52
|
|
DATE_FORMAT('2014-01-01', '%U'): 00
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### DATE_SUB
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
DATE_SUB(date, INTERVAL expr unit)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
日期时间的算术计算。
|
|
|
|
请参考 `DATE_ADD()`。
|
|
|
|
|
|
|
|
#### DATEDIFF
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
DATEDIFF(date1, date2)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回 `date1` 和 `date2` 之间的天数。
|
|
|
|
计算中只用到参数的日期部分,忽略时间部分。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT DATEDIFF('2015-06-19','1994-12-17');
|
|
+-------------------------------------+
|
|
| DATEDIFF('2015-06-19','1994-12-17') |
|
|
+-------------------------------------+
|
|
| 7489 |
|
|
+-------------------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### EXTRACT
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
EXTRACT(unit FROM date)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
以整数类型返回 `date` 的指定部分值。如果指定多个部分,则将所有值按顺序拼接。
|
|
|
|
`unit` 请参考 `DATE_ADD()`。当 `unit` 为 `WEEK` 时,请参考 `DATE_FORMAT()` 的 `%U` 说明。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
SELECT EXTRACT(WEEK FROM '2013-01-01'),
|
|
EXTRACT(WEEK FROM '2013-01-06'),
|
|
EXTRACT(YEAR_MONTH FROM '2012-03-09'),
|
|
EXTRACT(DAY FROM NOW())\G;
|
|
* 1. row *
|
|
EXTRACT(WEEK FROM '2013-01-01'): 0
|
|
EXTRACT(WEEK FROM '2013-01-06'): 1
|
|
EXTRACT(YEAR_MONTH FROM '2012-03-09'): 201203
|
|
EXTRACT(DAY FROM NOW()): 18
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### FROM_DAYS
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
FROM_DAYS(N)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回指定天数 `N` 对应的 `DATE` 值。天数指距离 `0000-01-01` 的天数。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT FROM_DAYS(736271), FROM_DAYS(700000);
|
|
+-------------------+-------------------+
|
|
| FROM_DAYS(736271) | FROM_DAYS(700000) |
|
|
+-------------------+-------------------+
|
|
| 2015-11-04 | 1916-07-15 |
|
|
+-------------------+-------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### FROM_UNIXTIME
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
FROM_UNIXTIME(unix_timestamp)
|
|
FROM_UNIXTIME(unix_timestamp, format)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
* 不指定 `format` 参数时,返回 `DATETIME` 类型值,不考虑时区。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* 指定 `format` 参数时,返回指定格式的日期时间字符串。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`unix_timestamp` 指 UNIX 时间戳,即距离 `1970-01-01 00:00:00.000000` 的微秒数。
|
|
|
|
`format` 支持的格式已在 `DATE_FORMAT()` **说** **明** 中列出。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
|
|
+---------------------------------------------------------+
|
|
| FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x') |
|
|
+---------------------------------------------------------+
|
|
| 2018 5th May 08:41:26 2018 |
|
|
+---------------------------------------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### MONTH
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
MONTH(date)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回 `date` 的月份信息。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT MONTH('2008-02-03');
|
|
+---------------------+
|
|
| MONTH('2008-02-03') |
|
|
+---------------------+
|
|
| 2 |
|
|
+---------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### NOW
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
NOW([scale])
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
同 `CURRENT_TIMESTAMP()`。
|
|
|
|
|
|
|
|
#### PERIOD_DIFF
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
PERIOD_DIFF(p1, p2)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
以月份位单位返回两个日期之间的间隔。日期只能包含年月信息,格式只能为 `YYYYMM` 或 `YYMM`。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT PERIOD_DIFF(200802, 200703);
|
|
+----------------------------+
|
|
| PERIOD_DIFF(200802,200703) |
|
|
+----------------------------+
|
|
| 11 |
|
|
+----------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### STR_TO_DATE
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
STR_TO_DATE(str, format)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
使用 `format` 将 `str` 转换为 `DATETIME` 值、`DATE` 值、或 `TIME` 值。返回值类型取决于 `format` 包含日期时间的哪些部分。
|
|
|
|
`format` 支持的格式已在 `DATE_FORMAT()` **说** **明** 中列出。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r');
|
|
+-----------------------------------------------------+
|
|
| STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r') |
|
|
+-----------------------------------------------------+
|
|
| 2014-01-01 05:05:05 |
|
|
+-----------------------------------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### TIME
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
TIME(datetime
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
以 `TIME` 类型返回 `datetime` 的时间信息。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT TIME('2003-12-31 01:02:03');
|
|
+-----------------------------+
|
|
| TIME('2003-12-31 01:02:03') |
|
|
+-----------------------------+
|
|
| 01:02:03.000000 |
|
|
+-----------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### TIME_TO_USEC
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
TIME_TO_USEC(date)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将 `date` 值转换为距离 `1970-01-01 00:00:00.000000` 的微秒数,考虑时区信息。
|
|
|
|
`date` 可以表示日期,也可以表示日期时间。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT TIME_TO_USEC('2014-03-25'), TIME_TO_USEC(NOW());
|
|
+----------------------------+---------------------+
|
|
| TIME_TO_USEC('2014-03-25') | TIME_TO_USEC(NOW()) |
|
|
+----------------------------+---------------------+
|
|
| 1395676800000000 | 1525528100000000 |
|
|
+----------------------------+---------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### TIMEDIFF
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
TIMEDIFF(date1, date2)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
以 `TIME` 类型返回两个日期时间的时间间隔。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> TIMEDIFF('2015-06-06 12:12:12', '2014-06-05 11:11:11'),
|
|
-> TIMEDIFF('2015-06-06 12:12:12', '2015-06-05 11:11:11')
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
TIMEDIFF('2015-06-06 12:12:12', '2014-06-05 11:11:11'): 838:59:59
|
|
TIMEDIFF('2015-06-06 12:12:12', '2015-06-05 11:11:11'): 25:01:01
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### TIMESTAMPDIFF
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
TIMESTAMPDIFF(unit, date1, date2)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
以 `unit` 为单位返回两个日期时间的间隔。`unit` 只能为 `DATE_ADD()` 中的独立单位。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> TIMESTAMPDIFF(SECOND, NOW(), '2011-01-01 11:11:11'),
|
|
-> TIMESTAMPDIFF(DAY, '2011-01-01 11:11:11', NOW())
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
TIMESTAMPDIFF(SECOND, NOW(), '2011-01-01 11:11:11'): -231677498
|
|
TIMESTAMPDIFF(DAY, '2011-01-01 11:11:11', NOW()): 2681
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### TIMESTAMPADD
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
TIMESTAMPADD(unit, interval_expr, date)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
日期时间的算术计算。
|
|
|
|
同 `DATE_ADD()`,但 `unit` 只能为独立单位。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> TIMESTAMPADD(DAY, -5, '2010-01-01 00:00:00'),
|
|
-> DATE_ADD('2010-01-01 00:00:00', INTERVAL -5 DAY)
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
TIMESTAMPADD(DAY, -5, '2010-01-01 00:00:00'): 2009-12-27 00:00:00
|
|
DATE_ADD('2010-01-01 00:00:00', INTERVAL -5 DAY): 2009-12-27 00:00:00
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### TO_DAYS
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
TO_DAYS(date)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回指定 `date` 值对应的天数。天数指距离 `0000-01-01` 的天数。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT TO_DAYS('2015-11-04'), TO_DAYS('20151104');
|
|
+-----------------------+---------------------+
|
|
| TO_DAYS('2015-11-04') | TO_DAYS('20151104') |
|
|
+-----------------------+---------------------+
|
|
| 736271 | 736271 |
|
|
+-----------------------+---------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### USEC_TO_TIME
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
USEC_TO_TIME(usec)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将 `usec` 值转换为 `TIMESTAMP` 类型值。
|
|
|
|
`usec` 表示距离 `1970-01-01 00:00:00.000000` 的微秒数,考虑时区信息。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT USEC_TO_TIME(1);
|
|
+----------------------------+
|
|
| USEC_TO_TIME(1) |
|
|
+----------------------------+
|
|
| 1970-01-01 08:00:00.000001 |
|
|
+----------------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### UNIX_TIMESTAMP
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
UNIX_TIMESTAMP()
|
|
UNIX_TIMESTAMP(date)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
* 不指定 `date` 参数时,返回当前时间距离 '1970-01-01 00:00:00' 的秒数,考虑时区。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* 指定 `date` 参数时,返回指定时间距离 '1970-01-01 00:00:00' 的秒数,考虑时区。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT UNIX_TIMESTAMP(), TIME_TO_USEC(NOW());
|
|
+------------------+---------------------+
|
|
| UNIX_TIMESTAMP() | TIME_TO_USEC(NOW()) |
|
|
+------------------+---------------------+
|
|
| 1525570561 | 1525570561000000 |
|
|
+------------------+---------------------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
|
|
+---------------------------------------+
|
|
| UNIX_TIMESTAMP('1997-10-04 22:23:00') |
|
|
+---------------------------------------+
|
|
| 875974980 |
|
|
+---------------------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### UTC_TIMESTAMP
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
UTC_TIMESTAMP()
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回当前 UTC 时间。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT UTC_TIMESTAMP();
|
|
+---------------------+
|
|
| UTC_TIMESTAMP() |
|
|
+---------------------+
|
|
| 2018-05-06 01:38:32 |
|
|
+---------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### YEAR
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
YEAR(date)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回 `date` 值的年份信息。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT YEAR('1987-01-01');
|
|
+--------------------+
|
|
| YEAR('1987-01-01') |
|
|
+--------------------+
|
|
| 1987 |
|
|
+--------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
字符串函数
|
|
--------------
|
|
|
|
#### CONCAT
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CONCAT(str1, .., strN)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
把多个字符串连接成一个字符串。参数中包含 `NULL` 时,返回 `NULL`。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> CONCAT('test','obclient', '1.0'),
|
|
-> CONCAT('test','obclient', NULL)
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
CONCAT('test','obclient', '1.0'): testobclient1.0
|
|
CONCAT('test','obclient', NULL): NULL
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### CONCAT_WS
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CONCAT_WS(separator, str1, .., strN)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
把多个字符串连接成一个字符串,相邻字符串间使用 `separator` 分隔。参数中包含 `NULL` 时,将忽略 `NULL`。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> CONCAT_WS('_', 'First', 'Second'),
|
|
-> CONCAT_WS('_', 'First', NULL, 'Second')
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
CONCAT_WS('_', 'First', 'Second'): First_Second
|
|
CONCAT_WS('_', 'First', NULL, 'Second'): First_Second
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
FORMAT
|
|
|
|
**声明**
|
|
|
|
```unknow
|
|
FORMAT(X,D)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
把数字 X 格式化为"#,###,###.##"格式,四舍五入到 D 位小数,并以字符串形式返回结果(如果整数部分超过三位,会用","作为千分位分隔符)。如果 D 为 0,则结果没有小数点或小数部分。
|
|
|
|
**例子**
|
|
|
|
```unknow
|
|
obclient>SELECT FORMAT(12332.123456, 4) from DUAL;
|
|
+-------------------------+
|
|
| format(12332.123456, 4) |
|
|
+-------------------------+
|
|
| 12,332.1235 |
|
|
+-------------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>SELECT FORMAT(12332.1, 4) from DUAL;
|
|
+--------------------+
|
|
| format(12332.1, 4) |
|
|
+--------------------+
|
|
| 12,332.1000 |
|
|
+--------------------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient>SELECT FORMAT(12332.2, 0) from DUAL;
|
|
+--------------------+
|
|
| format(12332.2, 0) |
|
|
+--------------------+
|
|
| 12,332 |
|
|
+--------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### SUBSTR
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
SUBSTR(str, pos)
|
|
SUBSTR(str, pos, len)
|
|
SUBSTR(str FROM pos)
|
|
SUBSTR(str FROM pos FOR len)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回 `str` 的子字符串,起始位置为 `pos`,长度为 `len`。参数中包含 `NULL` 时,返回 `NULL`。
|
|
|
|
* 不指定 `len` 时,返回的子字符串从 `pos` 位置开始到 `str` 结尾。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* `pos` 值为负数时,从 `str` 尾部向头部倒序确定起始位置。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* `len` 小于等于 0,或 `pos` 指定的起始位置非法时,返回空字符串。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> SUBSTR('abcdefg', 3),
|
|
-> SUBSTR('abcdefg', 3, 2),
|
|
-> SUBSTR('abcdefg', -3),
|
|
-> SUBSTR('abcdefg', 3, -2),
|
|
-> SUBSTR('abcdefg' from -4 for 2)
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
SUBSTR('abcdefg', 3): cdefg
|
|
SUBSTR('abcdefg', 3, 2): cd
|
|
SUBSTR('abcdefg', -3): efg
|
|
SUBSTR('abcdefg', 3, -2):
|
|
SUBSTR('abcdefg' from -4 for 2): de
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### SUBSTRING
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
SUBSTRING(str, pos)
|
|
SUBSTRING(str, pos, len)
|
|
SUBSTRING(str FROM pos)
|
|
SUBSTRING(str FROM pos FOR len)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
同 `SUBSTR`。
|
|
|
|
|
|
|
|
#### TRIM
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
TRIM([[{BOTH | LEADING | TRAILING}] [remstr] FROM] str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
删除字符串所有前缀和/或后缀,默认为 `BOTH`。参数中包含 `NULL` 时,返回 `NULL`。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> TRIM(' bar '),
|
|
-> TRIM(LEADING 'x' FROM 'xxxbarxxx'),
|
|
-> TRIM(BOTH 'x' FROM 'xxxbarxxx'),
|
|
-> TRIM(TRAILING 'x' FROM 'xxxbarxxx')
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
TRIM(' bar '): bar
|
|
TRIM(LEADING 'x' FROM 'xxxbarxxx'): barxxx
|
|
TRIM(BOTH 'x' FROM 'xxxbarxxx'): bar
|
|
TRIM(TRAILING 'x' FROM 'xxxbarxxx'): xxxbar
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### LTRIM
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
LTRIM(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
删除字符串左侧的空格。
|
|
|
|
|
|
|
|
#### RTRIM
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
RTRIM(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
删除字符串右侧的空格。
|
|
|
|
|
|
|
|
#### ASCII
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
ASCII(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回字符串最左侧字符的 ASCII 码。
|
|
|
|
|
|
|
|
#### ORD
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
ORD(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回字符串最左侧字符的字符码。单字节编码如果最左侧字符是多字节编码字符,返回值计算规则如下:
|
|
|
|
```javascript
|
|
(1st byte code)
|
|
+ (2nd byte code * 256)
|
|
+ (3rd byte code * 256^2) ...
|
|
```
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT ORD('中国');
|
|
+---------------+
|
|
| ORD('中国') |
|
|
+---------------+
|
|
| 14989485 |
|
|
+---------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### LENGTH
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
LENGTH(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回 `str` 的字节长度。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT LENGTH('中国'), LENGTH('hello');
|
|
+------------------+-----------------+
|
|
| LENGTH('中国') | LENGTH('hello') |
|
|
+------------------+-----------------+
|
|
| 6 | 5 |
|
|
+------------------+-----------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### CHAR_LENGTH
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CHAR_LENGTH(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回字符串包含的字符数。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT CHAR_LENGTH('中国'), CHAR_LENGTH('hello');
|
|
+-----------------------+----------------------+
|
|
| CHAR_LENGTH('中国') | CHAR_LENGTH('hello') |
|
|
+-----------------------+----------------------+
|
|
| 2 | 5 |
|
|
+-----------------------+----------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### UPPER
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
UPPER(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将字符串中的小写字母转化为大写字母。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT UPPER('obclient您好!');
|
|
+-----------------------------+
|
|
| UPPER('obclient您好!') |
|
|
+-----------------------------+
|
|
| OCEANBASE您好! |
|
|
+-----------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### LOWER
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
LOWER(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将字符串中的大写字母转化为小写字母。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT LOWER('obclient您好!');
|
|
+-----------------------------+
|
|
| LOWER('obclient您好!') |
|
|
+-----------------------------+
|
|
| obclient您好! |
|
|
+-----------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### HEX
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
HEX(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将数字或字符串转化为十六进制字符串。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT HEX(255), HEX('abc');
|
|
+----------+------------+
|
|
| HEX(255) | HEX('abc') |
|
|
+----------+------------+
|
|
| FF | 616263 |
|
|
+----------+------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### UNHEX
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
UNHEX(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将十六进制字符串转化为正常字符串。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT UNHEX('4f6365616e42617365');
|
|
+-----------------------------+
|
|
| UNHEX('4f6365616e42617365') |
|
|
+-----------------------------+
|
|
| obclient |
|
|
+-----------------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### MD5
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
MD5(str)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回字符串的 MD5 值。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT MD5(1);
|
|
+----------------------------------+
|
|
| MD5(1) |
|
|
+----------------------------------+
|
|
| c4ca4238a0b923820dcc509a6f75849b |
|
|
+----------------------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### INT2IP
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
INT2IP(int_value)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将整数内码转换成 IP 地址。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> INT2IP(16777216),
|
|
-> HEX(16777216),
|
|
-> INT2IP(1)
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
INT2IP(16777216): 1.0.0.0
|
|
HEX(16777216): 1000000
|
|
INT2IP(1): 0.0.0.1
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### IP2INT
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
IP2INT('ip_addr')
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
将 IP 地址转换成整数内码。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> IP2INT('0.0.0.1'),
|
|
-> HEX(IP2INT('0.0.0.1')),
|
|
-> HEX(IP2INT('1.0.0.0'))
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
IP2INT('0.0.0.1'): 1
|
|
HEX(IP2INT('0.0.0.1')): 1
|
|
HEX(IP2INT('1.0.0.0')): 1000000
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### LIKE
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
str1 [NOT] LIKE str2 [ESCAPE str3]
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
字符串通配符匹配。参数中包含 `NULL` 时,返回 `NULL`。
|
|
|
|
通配符包括:
|
|
|
|
* `%`:匹配任意长度字符串。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* `_`:匹配单个字符。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ESCAPE 用于定义转义符,如果 str2 中包含 str3,在匹配时 str3 后的字符将做为普通字符处理。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT 'ab%' LIKE 'abc%' ESCAPE 'c';
|
|
+------------------------------+
|
|
| 'ab%' LIKE 'abc%' ESCAPE 'c' |
|
|
+------------------------------+
|
|
| 1 |
|
|
+------------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### REGEXP
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
str [NOT] REGEXP | RLIKE pat
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
正则匹配。参数中包含 `NULL` 时,返回 `NULL`。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> 1234 REGEXP 1,
|
|
-> 'hello' RLIKE 'h%'
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
1234 REGEXP 1: 1
|
|
'hello' RLIKE 'h%': 0
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### REPEAT
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
REPEAT(str, count)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回 `str` 重复 `count` 次组成的字符串。`count` 小于等于 0 时,返回空字符串。参数中包含 `NULL` 时,返回 `NULL`。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT
|
|
-> REPEAT('1', -1),
|
|
-> REPEAT(null, null),
|
|
-> REPEAT('Abc', 4)
|
|
-> \G
|
|
*************************** 1. row ***************************
|
|
REPEAT('1', -1):
|
|
REPEAT(null, null): NULL
|
|
REPEAT('Abc', 4): AbcAbcAbcAbc
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### SPACE
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
SPACE(N)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
返回包含 `N` 个空格的字符串。
|
|
|
|
|
|
|
|
#### SUBSTRING_INDEX
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
SUBSTRING_INDEX(str, delim, count)
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
在定界符 delim 以及 count 出现前,从字符串 str 返回字符串。若 count 为正值,则返回最终定界符(从左边开始)左边的一切内容。若 count 为负值,则返回定界符(从右边开始)右边的一切内容。任意一个参数为 NULL,返回 NULL;若 str 或 delim 为空字符串,则返回空串;若 count = 0, 返回空串。
|
|
|
|
*str, delim, count 参数支持数值与字符串的隐式转换。*
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select substring_index('abcdabc', 'abc', 0), substring_index('abcdabc', 'abc', 1), substring_index('abcdabc', 'abc', 2), substring_index('abcdabc', 'abc', 3), substring_index('abcdabc', 'abc', -1), substring_index('abcdabc', 'abc', -2), substring_index('abcdabc', 'abc', -3)\G;
|
|
* 1. row *
|
|
substring_index('abcdabc', 'abc', 0):
|
|
substring_index('abcdabc', 'abc', 1):
|
|
substring_index('abcdabc', 'abc', 2): abcd
|
|
substring_index('abcdabc', 'abc', 3): abcdabc
|
|
substring_index('abcdabc', 'abc', -1):
|
|
substring_index('abcdabc', 'abc', -2): dabc
|
|
substring_index('abcdabc', 'abc', -3): abcdabc
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### LOCATE
|
|
|
|
**声明**
|
|
|
|
`LOCATE(substr,str) , LOCATE(substr,str,pos)`
|
|
|
|
**说明**
|
|
|
|
第一个语法返回字符串 str 中子字符串 substr 的第一个出现位置。第二个语法返回字符串 str 中子字符串 substr 的第一个出现位置, 起始位置在 pos。如若 substr 不在 str 中,则返回值为 0。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT LOCATE('bar', 'foobarbar');
|
|
-> 4
|
|
obclient>SELECT LOCATE('xbar', 'foobar');
|
|
-> 0
|
|
obclient>SELECT LOCATE('bar', 'foobarbar',5);
|
|
-> 7
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### POSITION
|
|
|
|
**声明**
|
|
|
|
`POSITION(substr IN str)`
|
|
|
|
**说明**
|
|
|
|
与 LOCATE 同义。
|
|
|
|
|
|
|
|
#### INSTR
|
|
|
|
**声明**
|
|
|
|
`INSTR(str,substr)`
|
|
|
|
**说明**
|
|
|
|
返回字符串 str 中子字符串的第一个出现位置。这和 LOCATE() 的双参数形式相同,除非参数的顺序被颠倒。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT INSTR('foobarbar', 'bar');
|
|
-> 4
|
|
obclient>SELECT INSTR('xbar', 'foobar');
|
|
-> 0
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### REPLACE
|
|
|
|
**声明**
|
|
|
|
`REPLACE(str, from_str, to_str)`
|
|
|
|
**说明**
|
|
|
|
返回字符串 str 以及所有被字符 to_str 替代的字符串 from_str。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www');
|
|
+---------------------------------------------------------+
|
|
| REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www') |
|
|
+---------------------------------------------------------+
|
|
| wwwefg.gpg.nowdew.wwwdwwwe |
|
|
+---------------------------------------------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### FIELD
|
|
|
|
**声明**
|
|
|
|
`FIELD(str,str1,str2,str3,...)`
|
|
|
|
**说明**
|
|
|
|
返回参数 str 在 str1, str2, str3,... 列表中的索引位置(从 1 开始的位置)。在找不到 str 的情况下,返回值为 0。
|
|
|
|
如果所有的对于 FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数均按照 double 类型进行比较。
|
|
|
|
如果 str 为 NULL,则返回值为 0,原因是 NULL 不能同任何值进行同等比较。FILED() 是 ELT() 的补数。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select field('abc','abc1','abc2','abc','abc4','abc'), field(NULL, 'null1', NULL);
|
|
+-----------------------------------------------+----------------------------+
|
|
| field('abc','abc1','abc2','abc','abc4','abc') | field(NULL, 'null1', NULL) |
|
|
+-----------------------------------------------+----------------------------+
|
|
| 3 | 0 |
|
|
+-----------------------------------------------+----------------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### ELT
|
|
|
|
**声明**
|
|
|
|
`ELT(N, str1, str2, str3,...)`
|
|
|
|
**说明**
|
|
|
|
若 N=1,则返回值为 str1, 若 N=2,则返回值为 str2,以此类推。若 N 小于 1 或大于参数的数目,则返回值为NULL。ELT() 是 FIELD() 的补数。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select elt(3, 'abc1', 'abc2', 'abc', 'abc4', 'abc'), elt(0, 'null1', NULL);
|
|
+----------------------------------------------+-----------------------+
|
|
| elt(3, 'abc1', 'abc2', 'abc', 'abc4', 'abc') | elt(0, 'null1', NULL) |
|
|
+----------------------------------------------+-----------------------+
|
|
| abc | NULL |
|
|
+----------------------------------------------+-----------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### INSERT
|
|
|
|
**声明**
|
|
|
|
`INSERT (str1,pos,len,str2)`
|
|
|
|
**说明**
|
|
|
|
返回字符串 str1, 字符串中起始于 pos 位置,长度为 len 的子字符串将被 str2 取代。如果 pos 超过字符串长度,则返回值为原始字符串。 假如 len 的长度大于其它字符串的长度,则从位置 pos 开始替换。若任何一个参数为 null,则返回值为 NULL。这个函数支持多字节字元。
|
|
|
|
* *str1 和 str2 必须是字符串,pos 和 len 必须是整数。任意参数为 NULL,结果总为 NULL;*
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* *str1 和 str2 中的文字符被当做字节流看待;*
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* *pos 值为负数或者大于 str1 长度时,返回 str1;*
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* 当 len 小于 0,或大于 str 的长度时,返回结果为 str1 从开头到 pos 位置的串,和 str2 的组合串。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select insert('Quadratic',-2,100,'What'), insert('Quadratic',7,3,'What'),
|
|
-> insert('Quadratic',-1,3,'What'), insert('Quadratic',10,3,'What'), insert('Quadratic',5,-1,''),
|
|
-> insert('Quadratic',7,-1,'What')\G;
|
|
* 1. row *
|
|
insert('Quadratic',-2,100,'What'): Quadratic
|
|
insert('Quadratic',7,3,'What'): QuadraWhat
|
|
insert('Quadratic',-1,3,'What'): Quadratic
|
|
insert('Quadratic',10,3,'What'): Quadratic
|
|
insert('Quadratic',5,-1,''): Quad
|
|
insert('Quadratic',7,-1,'What'): QuadraWhat
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### LPAD
|
|
|
|
**声明**
|
|
|
|
`LPAD(str, len, padstr)`
|
|
|
|
**说明**
|
|
|
|
用指定字符串 padstr,在左侧填充字符串 str 到指定长度 len。如果 str 长度大于 len,则 str 被截断。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient > SELECT LPAD('hi',4,'??');
|
|
+-------------------+
|
|
| LPAD('hi',4,'??') |
|
|
+-------------------+
|
|
| ??hi |
|
|
+-------------------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient > SELECT LPAD('hi',1,'??');
|
|
+-------------------+
|
|
| LPAD('hi',1,'??') |
|
|
+-------------------+
|
|
| h |
|
|
+-------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### RPAD
|
|
|
|
**声明**
|
|
|
|
`RPAD(str, len, padstr)`
|
|
|
|
**说明**
|
|
|
|
用指定字符串 padstr,在右侧填充字符串 str 到指定长度 len。如果 str 长度大于 len,则 str 被截断。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> SELECT RPAD('hi',4,'??');
|
|
+-------------------+
|
|
| RPAD('hi',4,'??') |
|
|
+-------------------+
|
|
| hi?? |
|
|
+-------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient> SELECT RPAD('hi',1,'??');
|
|
+-------------------+
|
|
| RPAD('hi',1,'??') |
|
|
+-------------------+
|
|
| h |
|
|
+-------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### UUID
|
|
|
|
**声明**
|
|
|
|
`uuid()`
|
|
|
|
**说明**
|
|
|
|
生成一个全局唯一 ID。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> select uuid();
|
|
+--------------------------------------+
|
|
| uuid() |
|
|
+--------------------------------------+
|
|
| f756a1f6-4de6-11e8-90af-90b11c53e421 |
|
|
+--------------------------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### BIN
|
|
|
|
**声明**
|
|
|
|
`bin(N)`
|
|
|
|
**说明**
|
|
|
|
返回数字 N 的二进制形式。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient > SELECT BIN(12);
|
|
+---------+
|
|
| BIN(12) |
|
|
+---------+
|
|
| 1100 |
|
|
+---------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### QUOTE
|
|
|
|
**声明**
|
|
|
|
`quote(str)`
|
|
|
|
**说明**
|
|
|
|
引用一个字符串以产生一个结果可以作为 SQL 语句中正确地转义数据值。返回的字符串由单引号和单引号的各个实例封闭(''),反斜线(''),ASCII NUL 和 Control-Z 前面加一个反斜杠。如果参数为 NULL,则返回值是词 'NULL' 不包围单引号。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient > SELECT QUOTE('Don\'t!');
|
|
+------------------+
|
|
| QUOTE('Don\'t!') |
|
|
+------------------+
|
|
| 'Don\'t!' |
|
|
+------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient > SELECT QUOTE(NULL);
|
|
+-------------+
|
|
| QUOTE(NULL) |
|
|
+-------------+
|
|
| NULL |
|
|
+-------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### REGEXP_SUBSTR
|
|
|
|
**声明**
|
|
|
|
`regexp_substr(str,pattern,[position[,occurrence[,match_param[,subexpr]]]])`
|
|
|
|
**说明**
|
|
|
|
在 str 中搜索匹配正则表达式 pattern 的子串,子串不存在返回 NULL。这个函数支持多字节字元。除 match_param 外,其他任意参数为 NULL,结果为 NULL。
|
|
|
|
* str 待搜索的字符串,支持多字节字元。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* pattern 正则表达式,正则表达式规则兼容 mysql。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* position \[可选\] 搜索的开始位置。必须是大于 0 的正整数,小于等于 0 报错,输入为 NULL 返回 NULL,默认值为 1,表示从第一个字符开始搜索。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* occurrence \[可选\] 返回第几次匹配的值。必须是大于等于 0 的正整数,小于等于 0 报错,输入为 NULL 返回 NULL,默认值是 1,表示返回第一次匹配的结果。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* match_param \[可选\] 搜索参数,字符串类型,目前仅支持两个字符 'i','c',i: 代表忽略大小写 c: 代表不忽略,其他字符报错。默认值根据 str 字符集的 collection 决定。 为 NULL 时使用默认值。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* subexpr \[可选\] 返回正则表达式中第几个组的值。大于等于 0 的整数,小于 0 则报错。默认值是 0,表示返回满足整个 pattern 的子串。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) from dual;
|
|
+----------------------------------------------------------------------------------+
|
|
| regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) |
|
|
+----------------------------------------------------------------------------------+
|
|
| have |
|
|
+----------------------------------------------------------------------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient> select regexp_substr('foothebar', 'foo(.*)(bar)', 1, 1, 'c', 1) from dual;
|
|
+----------------------------------------------------------+
|
|
| regexp_substr('foothebar', 'foo(.*)(bar)', 1, 1, 'c', 1) |
|
|
+----------------------------------------------------------+
|
|
| the |
|
|
+----------------------------------------------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
转换函数
|
|
-------------
|
|
|
|
#### CAST
|
|
|
|
**声明**
|
|
|
|
`CAST(expr AS type)`
|
|
|
|
**说明**
|
|
|
|
将某种数据类型的表达式显式转换为另一种数据类型。
|
|
|
|
将 expr 字段值转换为 type 数据类型。
|
|
|
|
**参数说明** :
|
|
|
|
|
|
|
|
* expr:表示任何有效的 SQL 表达式。
|
|
|
|
|
|
|
|
* AS:用于分隔两个参数,在 AS 之前的是要处理的数据,在 AS 之后是要转换的数据类型。
|
|
|
|
|
|
|
|
* type:表示目标系统所提供的数据类型。可以是以下值其中的一个:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在使用 CAST 函数进行数据类型转换时,在下列情况下能够被接受:
|
|
|
|
* 两个表达式的数据类型完全相同;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* 两个表达式可隐式转换;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* 必须显式转换数据类型。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果试图进行不可能的转换,OceanBase数据库 将显示一条错误信息。
|
|
|
|
如果转换时没有指定数据类型的长度,则使用 OceanBase 数据库系统内部最大长度。如 varchar 是262,143字节,number 是 65 个 bit 位的浮动精度。
|
|
|
|
支持带符号和无符号的 64 比特值的运算。若你正在使用数字操作符 (如 +) 而其中一个操作数为无符号整数,则结果为无符号。可使用 SIGNED 和 UNSIGNED cast 操作符来覆盖它。将运算分别派给带符号或无符号 64 比特整数。
|
|
|
|
假如任意一个操作数为一个浮点值,则结果为一个浮点值。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT CAST(123 AS BOOL);
|
|
+-------------------+
|
|
| CAST(123 AS bool) |
|
|
+-------------------+
|
|
| 1 |
|
|
+-------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>select cast(1-2 as unsigned), cast(cast(1-2 as unsigned) as signed);
|
|
+-----------------------+---------------------------------------+
|
|
| cast(1-2 as unsigned) | cast(cast(1-2 as unsigned) as signed) |
|
|
+-----------------------+---------------------------------------+
|
|
| 18446744073709551615 | -1 |
|
|
+-----------------------+---------------------------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>SELECT CAST(1 AS UNSIGNED) - 2.0;
|
|
+---------------------------+
|
|
| CAST(1 AS UNSIGNED) - 2.0 |
|
|
+---------------------------+
|
|
| -1.0 |
|
|
+---------------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>select cast(0 as date);
|
|
+-----------------+
|
|
| cast(0 as date) |
|
|
+-----------------+
|
|
| 0000-00-00 |
|
|
+-----------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
数学函数
|
|
-------------
|
|
|
|
#### ROUND
|
|
|
|
**声明**
|
|
|
|
`ROUND(X), ROUND(X,D)`
|
|
|
|
**说明**
|
|
|
|
返回一个数值,四舍五入到指定的长度或精度。
|
|
|
|
返回参数 X, 其值接近于最近似的整数。在有两个参数的情况下,返回 X,其值保留到小数点后 D 位,而第 D 位的保留方式为四舍五入。若要接保留 X 值小数点左边的 D 位,可将 D 设为负值。
|
|
|
|
返回值的类型同第一个自变量相同(假设它是一个整数、双精度数或小数)。这意味着对于一个整数参数,结果也是一个整数(无小数部分)。
|
|
|
|
* 对于准确值数字,ROUND() 使用"四舍五入" 或"舍入成最接近的数" 的规则:对于一个分数部分为 .5 或大于 .5 的值,正数则上舍入到邻近的整数值,负数则下舍入临近的整数值。(换言之, 其舍入的方向是数轴上远离零的方向)。对于一个分数部分小于 .5 的值,正数则下舍入下一个整数值,负数则下舍入邻近的整数值,而正数则上舍入邻近的整数值。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* 对于近似值数字, ROUND() 遵循银行家规则"四舍--大于五入--五取最接近的偶数"的规则: 一个带有任何小数部分的值会被舍入成最接近的偶数整数。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select round(2.15,2);
|
|
+---------------+
|
|
| round(2.15,2) |
|
|
+---------------+
|
|
| 2.15 |
|
|
+---------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>select round(2555e-2,1);
|
|
+------------------+
|
|
| round(2555e-2,1) |
|
|
+------------------+
|
|
| 25.6 |
|
|
+------------------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient>select round(25e-1), round(25.3e-1),round(35e-1);
|
|
+--------------+----------------+--------------+
|
|
| round(25e-1) | round(25.3e-1) | round(35e-1) |
|
|
+--------------+----------------+--------------+
|
|
| 3 | 3 | 4 |
|
|
+--------------+----------------+--------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### CEIL
|
|
|
|
**声明**
|
|
|
|
`CEIL(expr)`
|
|
|
|
**说明**
|
|
|
|
返回大于或者等于指定表达式的最小整数。
|
|
|
|
还支持比较运算,结果为 BOOL 值,被转化为数字类型处理,产生的结果为 1(TRUE)、0 (FALSE);
|
|
|
|
如果输入 NULL,返回值为 NULL。
|
|
|
|
如果输入纯数字的字符串,支持自动转换成数字类型。
|
|
|
|
返回值会被转化为一个 BIGINT。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select ceil(1.2), ceil(-1.2), ceil(1+1.5), ceil(1=1),ceil(1<1),ceil(null);
|
|
+-----------+------------+-------------+-----------+-----------+------------+
|
|
| ceil(1.2) | ceil(-1.2) | ceil(1+1.5) | ceil(1=1) | ceil(1<1) | ceil(null) |
|
|
+-----------+------------+-------------+-----------+-----------+------------+
|
|
| 2 | -1 | 3 | 1 | 0 | NULL |
|
|
+-----------+------------+-------------+-----------+-----------+------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>select ceil(name);
|
|
ERROR 1166 (42703): Unkown column name 'name'
|
|
|
|
obclient>select ceil('2');
|
|
+-----------+
|
|
| ceil('2') |
|
|
+-----------+
|
|
| 2 |
|
|
+-----------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### FLOOR
|
|
|
|
**声明**
|
|
|
|
`FLOOR(expr)`
|
|
|
|
**说明**
|
|
|
|
和 CEIL(expr) 函数功能类似,返回小于或者等于指定表达式的最大整数。
|
|
|
|
还支持比较运算,结果为 BOOL 值,被转化为数字类型处理,产生的结果为 1(TRUE)、0 (FALSE);
|
|
|
|
如果输入 NULL,返回值为 NULL。
|
|
|
|
如果输入纯数字的字符串,支持自动转换成数字类型。
|
|
|
|
返回值会被转化为一个 BIGINT。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select floor(1.2), floor(-1.2), floor(1+1.5), floor(1=1),floor(1<1),floor(null);
|
|
+------------+-------------+--------------+------------+------------+-------------+
|
|
| floor(1.2) | floor(-1.2) | floor(1+1.5) | floor(1=1) | floor(1<1) | floor(null) |
|
|
+------------+-------------+--------------+------------+------------+-------------+
|
|
| 1 | -2 | 2 | 1 | 0 | NULL |
|
|
+------------+-------------+--------------+------------+------------+-------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>select floor(name);
|
|
ERROR 1166 (42703): Unkown column name 'name'
|
|
|
|
obclient>select floor('2');
|
|
+------------+
|
|
| floor('2') |
|
|
+------------+
|
|
| 2 |
|
|
+------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### ABS
|
|
|
|
**声明**
|
|
|
|
`ABS(expr)`
|
|
|
|
**说明**
|
|
|
|
绝对值函数,求表达式绝对值,函数返回值类型与数值表达式的数据类型相同。
|
|
|
|
还支持比较运算,结果为 BOOL 值,被转化为数字类型处理,产生的结果为 1(TRUE)、0 (FALSE);
|
|
|
|
如果输入 NULL,返回值为 NULL。
|
|
|
|
如果输入纯数字的字符串,支持自动转换成数字类型。
|
|
|
|
返回值会被转化为一个 BIGINT。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select abs(5), abs(-5.777), abs(0), abs(1/2), abs(1-5);
|
|
+--------+-------------+--------+----------+----------+
|
|
| abs(5) | abs(-5.777) | abs(0) | abs(1/2) | abs(1-5) |
|
|
+--------+-------------+--------+----------+----------+
|
|
| 5 | 5.777 | 0 | 0.5000 | 4 |
|
|
+--------+-------------+--------+----------+----------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### NEG
|
|
|
|
**声明**
|
|
|
|
`NEG(expr)`
|
|
|
|
**说明**
|
|
|
|
求补函数,对操作数执行求补运算:用零减去操作数,然后结果返回操作数。
|
|
|
|
支持比较运算,结果为 BOOL 值,被转化为数字类型处理,产生的结果为 1(TRUE)、0 (FALSE),再对结果求补。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select neg(1), neg(1+1), neg(2*3), neg(1=1), neg(5<1);
|
|
+--------+----------+----------+----------+----------+
|
|
| neg(1) | neg(1+1) | neg(2*3) | neg(1=1) | neg(5<1) |
|
|
+--------+----------+----------+----------+----------+
|
|
| -1 | -2 | -6 | -1 | 0 |
|
|
+--------+----------+----------+----------+----------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### SIGN
|
|
|
|
**声明**
|
|
|
|
`SIGN(X)`
|
|
|
|
**说明**
|
|
|
|
SIGN(X) 返回参数作为 -1、 0 或 1 的符号,该符号取决于 X 的值为负、零或正。
|
|
|
|
支持比较运算,结果为 BOOL 值,被转化为数字类型处理,产生的结果为 1(TRUE)、0 (FALSE);
|
|
|
|
如果输入 NULL,返回值为 NULL。
|
|
|
|
支持浮点数、十六进制数。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT SIGN(-32), SIGN(0), SIGN(234);
|
|
+-----------+---------+-----------+
|
|
| SIGN(-32) | SIGN(0) | SIGN(234) |
|
|
+-----------+---------+-----------+
|
|
| -1 | 0 | 1 |
|
|
+-----------+---------+-----------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient>select sign(null),sign(false),sign(0x01);
|
|
+------------+-------------+------------+
|
|
| sign(null) | sign(false) | sign(0x01) |
|
|
+------------+-------------+------------+
|
|
| NULL | 0 | 1 |
|
|
+------------+-------------+------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### CONV
|
|
|
|
**声明**
|
|
|
|
`CONV(N, from_base, to_base)`
|
|
|
|
**说明**
|
|
|
|
不同数基间转换数字。返回值为一个字符串,由 from_base 基转化为 to_base 基。输入参数 N 可以是一个整数或字符串。最小基数为 2,而最大基数则为 36。如果 to_base 是一个负数,则 N 被看作一个带符号数。否则,N 被看作无符号数。from_base 如果是负数,则被当作整数处理,符号被忽略。N 参数仅支持 int 类型和字符串类型输入;from_base 和 to_base 参数仅支持十进制 int 类型输入,且取值范围为 \[-36, -2\] U \[2, 36\]。
|
|
|
|
非法输入将导致报错,其中非法输入包括以下情况:
|
|
|
|
* *from_base 或者 to_base 不是一个合法的十进制int类型输入;*
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* *from_base 或者 to_base 超出 \[-36,-2\] U \[2,36\] 的取值范围;*
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* N 不是一个合法的数字表示,例如取值超出 0~9,a~z,A~Z 的字符范围;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* N 超出了 from_base 基的取值范围,例如 from_base 为 2,而 N 取值为 3;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* N 的取值超出了 int64 的最大表示范围,即 \[-9223372036854775807, 9223372036854775807\]。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select conv(9223372036854775807,10,2);
|
|
+-----------------------------------------------------------------+
|
|
| conv(9223372036854775807,10,2) |
|
|
+-----------------------------------------------------------------+
|
|
| 111111111111111111111111111111111111111111111111111111111111111 |
|
|
+-----------------------------------------------------------------+
|
|
1 row in set (0.00 sec)
|
|
|
|
obclient>select conv('-acc',21,-7);
|
|
+--------------------+
|
|
| conv('-acc',21,-7) |
|
|
+--------------------+
|
|
| -16425 |
|
|
+--------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### MOD
|
|
|
|
**声明**
|
|
|
|
`MOD(N,M)`
|
|
|
|
**说明**
|
|
|
|
取余函数。MOD(N,M), N % M, N MOD M 三种形式是等效的。
|
|
|
|
MOD() 对于带有小数部分的数值也起作用,它返回除法运算后的精确余数。
|
|
|
|
N,M 中任何一个参数为 NULL,返回值都为 NULL。M 为 0 时,也返回 NULL。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select mod(29,19), 29 mod 19, 29 % 19;
|
|
+------------+-----------+---------+
|
|
| mod(29,19) | 29 mod 19 | 29 % 19 |
|
|
+------------+-----------+---------+
|
|
| 10 | 10 | 10 |
|
|
+------------+-----------+---------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### POW
|
|
|
|
**声明**
|
|
|
|
`POW(X,Y)`
|
|
|
|
**说明**
|
|
|
|
返回 X 的 Y 次方。
|
|
|
|
X 与 Y 中任何一个参数为 NULL,返回值都为 NULL。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select pow(4,2), pow(4,-2), pow(1,null);
|
|
+----------+-----------+-------------+
|
|
| pow(4,2) | pow(4,-2) | pow(1,null) |
|
|
+----------+-----------+-------------+
|
|
| 16 | 0.0625 | NULL |
|
|
+----------+-----------+-------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### POWER
|
|
|
|
**声明**
|
|
|
|
`POWER(X,Y)`
|
|
|
|
**说明**
|
|
|
|
POWER(X,Y) 和 POW(X,Y) 是同义函数。
|
|
|
|
|
|
|
|
#### RAND
|
|
|
|
**声明**
|
|
|
|
`rand([N])`
|
|
|
|
**说明**
|
|
|
|
RAND(\[N\]) 函数接受 0 个或者 1 个参数(N 被称为随机数种子),返回一个范围是 \[0,1.0) 的随机浮点数。如果想获得一个范围在 \[i, j) 的随机整数,可以使用表达式 FLOOR(I + RAND() \* (j - i))。
|
|
|
|
如果参数 N 不指定,那么在执行之前会使用随机种子初始化,之后 RAND() 会根据这个初始化值来生成随机数,所以 RAND() 每次会生成不同的随机数序列。
|
|
|
|
如果参数 N 指定,那么 N 会作为随机数种子来生成随机数。根据 N 是否是常量,分成以下两种情况:
|
|
|
|
* 如果 N 是常量,那么 N 在执行之前会被当成随机种子初始化,之后 RAND(N) 会根据这个初始化值来生成随机数。相同的 N 值会生成相同的随机数序列。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
* 如果 N 是变量(比如 N 是一个列值),那么 N 会在每次执行的时候作为随机数种子来生成随机数。相同的 N 值会生成相同的随机数。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
除了出现在 Select 语句中,RAND(\[N\]) 也可以出现在 where,order by 和 group by 语句中,它的执行方式还是按照上述规则执行。比如,如果想随机的对一个表进行排序,可以使用如下 SQL:select from t1 order by rand()。如果想随机取样一个表的 100 行,可以使用如下 SQL:select from t1 order by rand() limit 100。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient> select a, b, rand() from t3;
|
|
+------+------+---------------------+
|
|
| a | b | rand() |
|
|
+------+------+---------------------+
|
|
| 1 | 1 | 0.641815407799385 |
|
|
| 2 | 2 | 0.16825051248841966 |
|
|
| 3 | 3 | 0.9158063697775886 |
|
|
+------+------+---------------------+
|
|
3 rows in set (0.00 sec)
|
|
|
|
obclient> select a, b, rand() from t3;
|
|
+------+------+---------------------+
|
|
| a | b | rand() |
|
|
+------+------+---------------------+
|
|
| 1 | 1 | 0.07428034215632857 |
|
|
| 2 | 2 | 0.6239826321825224 |
|
|
| 3 | 3 | 0.897072165177271 |
|
|
+------+------+---------------------+
|
|
3 rows in set (0.00 sec)
|
|
|
|
obclient> select a, b, rand(3) from t3;
|
|
+------+------+---------------------+
|
|
| a | b | rand(3) |
|
|
+------+------+---------------------+
|
|
| 1 | 1 | 0.9057697559760601 |
|
|
| 2 | 2 | 0.37307905813034536 |
|
|
| 3 | 3 | 0.14808605345719125 |
|
|
+------+------+---------------------+
|
|
3 rows in set (0.00 sec)
|
|
|
|
obclient> select a, b, rand(3) from t3;
|
|
+------+------+---------------------+
|
|
| a | b | rand(3) |
|
|
+------+------+---------------------+
|
|
| 1 | 1 | 0.9057697559760601 |
|
|
| 2 | 2 | 0.37307905813034536 |
|
|
| 3 | 3 | 0.14808605345719125 |
|
|
+------+------+---------------------+
|
|
3 rows in set (0.00 sec)
|
|
|
|
obclient> select a, b, rand(a), rand(b) from t3;
|
|
+------+------+---------------------+---------------------+
|
|
| a | b | rand(a) | rand(b) |
|
|
+------+------+---------------------+---------------------+
|
|
| 1 | 1 | 0.40540353712197724 | 0.40540353712197724 |
|
|
| 2 | 2 | 0.6555866465490187 | 0.6555866465490187 |
|
|
| 3 | 3 | 0.9057697559760601 | 0.9057697559760601 |
|
|
+------+------+---------------------+---------------------+
|
|
3 rows in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
比较函数
|
|
-------------
|
|
|
|
#### GREATEST
|
|
|
|
**声明**
|
|
|
|
`GREATEST(value1, ...)`
|
|
|
|
**说明**
|
|
|
|
返回参数的最大值,和函数 LEAST() 相对。
|
|
|
|
参数至少为两个(一个参数将会报错);如果参数中有 NULL, 返回值为 NULL。
|
|
|
|
当参数中同时存在数值和字符时,把字符隐式转换为数值类型处理,不能转换的报错。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select greatest(2,1), greatest('2',1,0), greatest('a','b','c'), greatest('a', NULL, 'c'), greatest('2014-05-15','2014-06-01')\G
|
|
* 1. row *
|
|
greatest(2,1): 2
|
|
greatest('2',1,0): 2
|
|
greatest('a','b','c'): c
|
|
greatest('a', NULL, 'c'): NULL
|
|
greatest('2014-05-15','2014-06-01'): 2014-06-01
|
|
1 row in set (0.01 sec)
|
|
obclient>select greatest(2);
|
|
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'greatest'
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### LEAST
|
|
|
|
**声明**
|
|
|
|
`LEAST(value1, ...)`
|
|
|
|
**说明**
|
|
|
|
返回参数的最小值,和函数 GREATEST() 相对。
|
|
|
|
参数至少为两个;如果参数中有 NULL,返回值为 NULL。
|
|
|
|
当参数中同时存在数值和字符时,把字符隐式转换为数值类型处理,不能转换的报错。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select least(2, null), least('2',4,9), least('a','b','c'), least('a',NULL,'c'), least('2014-05-15','2014-06-01')\G;
|
|
* 1. row *
|
|
least(2, null): NULL
|
|
least('2',4,9): 2
|
|
least('a','b','c'): a
|
|
least('a',NULL,'c'): NULL
|
|
least('2014-05-15','2014-06-01'): 2014-05-15
|
|
1 row in set (0.01 sec)
|
|
obclient>select least(2);
|
|
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'least'
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### ISNULL
|
|
|
|
**声明**
|
|
|
|
`ISNULL(expr)`
|
|
|
|
**说明**
|
|
|
|
如果参数 expr 为 NULL,那么 ISNULL() 的返回值为 1,否则范围值为 0。
|
|
|
|
ISNULL() 函数可以用来替代针对 NULL 的等值(=)比较。(使用 = 的 NULL 值比较通常都是错误的。)ISNULL() 函数同 IS NULL 比较操作符具有一些相同的特性。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT ISNULL(null), ISNULL('test'), ISNULL(123.456), ISNULL('10:00');
|
|
+--------------+----------------+-----------------+-----------------+
|
|
| ISNULL(null) | ISNULL('test') | ISNULL(123.456) | ISNULL('10:00') |
|
|
+--------------+----------------+-----------------+-----------------+
|
|
| 1 | 0 | 0 | 0 |
|
|
+--------------+----------------+-----------------+-----------------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient>SELECT ISNULL(null+1);
|
|
+----------------+
|
|
| ISNULL(null+1) |
|
|
+----------------+
|
|
| 1 |
|
|
+----------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
流程控制函数
|
|
---------------
|
|
|
|
#### CASE
|
|
|
|
**声明**
|
|
|
|
```javascript
|
|
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
|
|
OR
|
|
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
|
|
```
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
在第一个方案的返回结果中,value = compare-value。而第二个方案的返回结果是第一种条件为真。如果没有匹配的结果值,则返回结果为 ELSE 后的结果,如果没有 ELSE 部分,则返回值为 NULL。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select CASE 'b' when 'a' then 1 when 'b' then 2 END;
|
|
+----------------------------------------------+
|
|
| CASE 'b' when 'a' then 1 when 'b' then 2 END |
|
|
+----------------------------------------------+
|
|
| 2 |
|
|
+----------------------------------------------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient>select CASE concat('a','b') when concat('ab','') then 'a' when 'b' then 'b' end;
|
|
+--------------------------------------------------------------------------+
|
|
| CASE concat('a','b') when concat('ab','') then 'a' when 'b' then 'b' end |
|
|
+--------------------------------------------------------------------------+
|
|
| a |
|
|
+--------------------------------------------------------------------------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient>select case when 1>0 then 'true' else 'false' end;
|
|
+--------------------------------------------+
|
|
| case when 1>0 then 'true' else 'false' end |
|
|
+--------------------------------------------+
|
|
| true |
|
|
+--------------------------------------------+
|
|
1 row in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### IF
|
|
|
|
**声明**
|
|
|
|
`IF(expr1,expr2,expr3)`
|
|
|
|
**说明**
|
|
|
|
如果 expr1 的值为 TRUE(即:expr1\<\>0 且 expr1\<\>NULL),返回结果为 expr2; 否则返回结果为 expr3。
|
|
|
|
IF() 返回结果可以是数值或字符串类型,它取决于使用的内容。
|
|
|
|
如果 expr2, expr3 中只有一个明确是 NULL,则 IF() 函数的结果类型为非 NULL 表达式的结果类型。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>select if(5>6, 'T','F'), if (5>6, 1, 0), if(null, 'True', 'False'), if(0, 'True', 'False')\G
|
|
* 1. row *
|
|
if(5>6, 'T','F'): F
|
|
if (5>6, 1, 0): 0
|
|
if(null, 'True', 'False'): False
|
|
if(0, 'True', 'False'): False
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### IFNULL
|
|
|
|
**声明**
|
|
|
|
`IFNULL(expr1, expr2)`
|
|
|
|
**说明**
|
|
|
|
假设 expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL() 的返回值是数值或字符串,具体情况取决于其所使用的语境。
|
|
|
|
IF() 的默认返回值类型按照以下方式计算:
|
|
|
|
|
|
| 表达式 | 返回值 |
|
|
|--------------------------|-----|
|
|
| expr1 或 expr2 返回值为一个字符串。 | 字符串 |
|
|
| expr1 或 expr2 返回值为一个浮点值。 | 浮点 |
|
|
| expr1 或 expr2 返回值为一个整数。 | 整数 |
|
|
|
|
|
|
|
|
假如 expr1 和 expr2 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT IFNULL('abc', null), IFNULL(NULL+1, NULL+2), IFNULL(1/0, 0/1);
|
|
+---------------------+------------------------+------------------+
|
|
| IFNULL('abc', null) | IFNULL(NULL+1, NULL+2) | IFNULL(1/0, 0/1) |
|
|
+---------------------+------------------------+------------------+
|
|
| abc | NULL | 0.0000 |
|
|
+---------------------+------------------------+------------------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### NULLIF
|
|
|
|
**声明**
|
|
|
|
`NULLIF(expr1, expr2)`
|
|
|
|
**说明**
|
|
|
|
如果 expr1 = expr2 成立,那么返回值为 NULL,否则返回值为 expr1。这和 CASE WHEN
|
|
|
|
*expr1 = expr2 THEN NULL ELSE expr1 END 相同。注意,如果参数不相等,则两次求得的值为 expr1。*
|
|
|
|
**例子**
|
|
|
|
```javascript
|
|
obclient>SELECT NULLIF('ABC', 123), NULLIF('123',123), NULLIF(NULL, 'abc');
|
|
+--------------------+-------------------+---------------------+
|
|
| NULLIF('ABC', 123) | NULLIF('123',123) | NULLIF(NULL, 'abc') |
|
|
+--------------------+-------------------+---------------------+
|
|
| ABC | NULL | NULL |
|
|
+--------------------+-------------------+---------------------+
|
|
1 row in set, 1 warning (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### ORA_DECODE
|
|
|
|
**声明**
|
|
|
|
`ora_decode(条件, 值1, 返回值1, 值2, 返回值2, ... 值n, 返回值n, 缺省值)`
|
|
|
|
**说明**
|
|
|
|
ORA_DECODE() 函数功能等同于 Oracle 的 DECODE() 函数功能。
|
|
|
|
该函数的含义如下:
|
|
|
|
```javascript
|
|
IF 条件=值1
|
|
THEN RETURN(返回值1)
|
|
ELSIF 条件=值2
|
|
THEN RETURN(返回值2)
|
|
......
|
|
ELSIF 条件=值n
|
|
THEN RETURN(返回值n)
|
|
ELSE RETURN(缺省值)
|
|
END IF
|
|
```
|
|
|
|
|