日期时间函数

    日期时间函数主要用来显示有关日期和时间的信息。

    CURDATE

    声明

    1. CURDATE()

    说明

    返回当前日期,不含时间部分。

    示例

    1. OceanBase (root@test)> SELECT CURDATE();
    2. +------------+
    3. | CURDATE() |
    4. +------------+
    5. | 2018-05-05 |
    6. +------------+
    7. 1 row in set (0.00 sec)

    CURRENT_DATE

    声明

    1. CURRENT_DATE()
    2. CURRENT_DATE

    说明

    CURDATE()

    CURRENT_TIME

    声明

    1. CURRENT_TIME([scale])

    说明

    返回当前时间,不含日期部分。

    scale有效值为0到6,表示微秒部分精度,默认值为0。

    示例

    1. OceanBase (root@test)> SELECT CURRENT_TIME(6);
    2. +-----------------+
    3. | CURRENT_TIME(6) |
    4. +-----------------+
    5. | 11:11:45.215311 |
    6. +-----------------+
    7. 1 row in set (0.01 sec)

    CURRENT_TIMESTAMP

    声明

    1. CURRENT_TIMESTAMP([scale])

    说明

    返回当前日期时间,考虑时区设置。

    scale有效值为0到6,表示微秒部分精度,默认值为0。

    示例

    1. OceanBase (root@test)> SELECT CURRENT_TIMESTAMP(6);
    2. +----------------------------+
    3. | CURRENT_TIMESTAMP(6) |
    4. +----------------------------+
    5. | 2018-05-05 11:35:39.177764 |
    6. +----------------------------+
    7. 1 row in set (0.01 sec)

    CURTIME

    声明

    1. CURTIME()

    说明

    CURRENT_TIME()

    DATE_ADD

    声明

    1. 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’

    示例

    1. OceanBase (root@test)> SELECT
    2. -> DATE_ADD(NOW(), INTERVAL 5 DAY),
    3. -> DATE_ADD('2014-01-10', INTERVAL 5 MICROSECOND),
    4. -> DATE_ADD('2014-01-10', INTERVAL 5 SECOND),
    5. -> DATE_ADD('2014-01-10', INTERVAL 5 MINUTE),
    6. -> DATE_ADD('2014-01-10', INTERVAL 5 HOUR),
    7. -> DATE_ADD('2014-01-10', INTERVAL 5 DAY),
    8. -> DATE_ADD('2014-01-10', INTERVAL 5 WEEK),
    9. -> DATE_ADD('2014-01-10', INTERVAL 5 MONTH),
    10. -> DATE_ADD('2014-01-10', INTERVAL 5 QUARTER),
    11. -> DATE_ADD('2014-01-10', INTERVAL 5 YEAR),
    12. -> DATE_ADD('2014-01-10', INTERVAL '5.000005' SECOND_MICROSECOND),
    13. -> DATE_ADD('2014-01-10', INTERVAL '05:05.000005' MINUTE_MICROSECOND),
    14. -> DATE_ADD('2014-01-10', INTERVAL '05:05' MINUTE_SECOND),
    15. -> DATE_ADD('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND),
    16. -> DATE_ADD('2014-01-10', INTERVAL '05:05:05' HOUR_SECOND),
    17. -> DATE_ADD('2014-01-10', INTERVAL '05:05' HOUR_MINUTE),
    18. -> DATE_ADD('2014-01-10', INTERVAL '01 05:05:05.000005' DAY_MICROSECOND),
    19. -> DATE_ADD('2014-01-10', INTERVAL '01 05:05:05' DAY_SECOND),
    20. -> DATE_ADD('2014-01-10', INTERVAL '01 05:05' DAY_MINUTE),
    21. -> DATE_ADD('2014-01-10', INTERVAL '01 05' DAY_HOUR),
    22. -> DATE_ADD('2014-01-10', INTERVAL '1-01' YEAR_MONTH)
    23. -> \G
    24. *************************** 1. row ***************************
    25. DATE_ADD(NOW(), INTERVAL 5 DAY): 2018-05-10 14:54:52
    26. DATE_ADD('2014-01-10', INTERVAL 5 MICROSECOND): 2014-01-10 00:00:00.000005
    27. DATE_ADD('2014-01-10', INTERVAL 5 SECOND): 2014-01-10 00:00:05
    28. DATE_ADD('2014-01-10', INTERVAL 5 MINUTE): 2014-01-10 00:05:00
    29. DATE_ADD('2014-01-10', INTERVAL 5 HOUR): 2014-01-10 05:00:00
    30. DATE_ADD('2014-01-10', INTERVAL 5 DAY): 2014-01-15
    31. DATE_ADD('2014-01-10', INTERVAL 5 WEEK): 2014-02-14
    32. DATE_ADD('2014-01-10', INTERVAL 5 MONTH): 2014-06-10
    33. DATE_ADD('2014-01-10', INTERVAL 5 QUARTER): 2015-04-10
    34. DATE_ADD('2014-01-10', INTERVAL 5 YEAR): 2019-01-10
    35. DATE_ADD('2014-01-10', INTERVAL '5.000005' SECOND_MICROSECOND): 2014-01-10 00:00:05.000005
    36. DATE_ADD('2014-01-10', INTERVAL '05:05.000005' MINUTE_MICROSECOND): 2014-01-10 00:05:05.000005
    37. DATE_ADD('2014-01-10', INTERVAL '05:05' MINUTE_SECOND): 2014-01-10 00:05:05
    38. DATE_ADD('2014-01-10', INTERVAL '05:05:05.000005' HOUR_MICROSECOND): 2014-01-10 05:05:05.000005
    39. DATE_ADD('2014-01-10', INTERVAL '05:05:05' HOUR_SECOND): 2014-01-10 05:05:05
    40. DATE_ADD('2014-01-10', INTERVAL '05:05' HOUR_MINUTE): 2014-01-10 05:05:00
    41. DATE_ADD('2014-01-10', INTERVAL '01 05:05:05.000005' DAY_MICROSECOND): 2014-01-11 05:05:05.000005
    42. DATE_ADD('2014-01-10', INTERVAL '01 05:05:05' DAY_SECOND): 2014-01-11 05:05:05
    43. DATE_ADD('2014-01-10', INTERVAL '01 05:05' DAY_MINUTE): 2014-01-11 05:05:00
    44. DATE_ADD('2014-01-10', INTERVAL '01 05' DAY_HOUR): 2014-01-11 05:00:00
    45. DATE_ADD('2014-01-10', INTERVAL '1-01' YEAR_MONTH): 2015-02-10
    46. 1 row in set (0.01 sec)

    DATE_FORMAT

    声明

    1. 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
    %r12小时制时间。hh:mm:ss AM/PM
    %S秒。00..59
    %s秒。00..59
    %T24小时制时间。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两位年份。
    %%文字字符,输出一个%

    示例

    1. OceanBase (root@test)> SELECT
    2. -> DATE_FORMAT('2014-01-01', '%Y-%M-%d'),
    3. -> DATE_FORMAT('2014-01-01', '%X-%V'),
    4. -> DATE_FORMAT('2014-01-01', '%U')
    5. -> \G
    6. *************************** 1. row ***************************
    7. DATE_FORMAT('2014-01-01', '%Y-%M-%d'): 2014-January-01
    8. DATE_FORMAT('2014-01-01', '%X-%V'): 2013-52
    9. DATE_FORMAT('2014-01-01', '%U'): 00
    10. 1 row in set (0.01 sec)

    DATE_SUB

    声明

    1. DATE_SUB(date, INTERVAL expr unit)

    说明

    日期时间的算术计算。

    请参考DATE_ADD()

    DATEDIFF

    声明

    1. DATEDIFF(date1, date2)

    说明

    返回date1date2之间的天数。

    计算中只用到参数的日期部分,忽略时间部分。

    示例

    1. OceanBase (root@test)> SELECT DATEDIFF('2015-06-19','1994-12-17');
    2. +-------------------------------------+
    3. | DATEDIFF('2015-06-19','1994-12-17') |
    4. +-------------------------------------+
    5. | 7489 |
    6. +-------------------------------------+
    7. 1 row in set (0.01 sec)

    EXTRACT

    声明

    1. EXTRACT(unit FROM date)

    说明

    以整数类型返回date的指定部分值。如果指定多个部分,则将所有值按顺序拼接。

    unit请参考DATE_ADD()。当unitWEEK时,请参考DATE_FORMAT()%U说明

    示例

    1. SELECT EXTRACT(WEEK FROM '2013-01-01'),
    2. EXTRACT(WEEK FROM '2013-01-06'),
    3. EXTRACT(YEAR_MONTH FROM '2012-03-09'),
    4. EXTRACT(DAY FROM NOW())\G;
    5. * 1. row *
    6. EXTRACT(WEEK FROM '2013-01-01'): 0
    7. EXTRACT(WEEK FROM '2013-01-06'): 1
    8. EXTRACT(YEAR_MONTH FROM '2012-03-09'): 201203
    9. EXTRACT(DAY FROM NOW()): 18
    10. 1 row in set (0.00 sec)

    FROM_DAYS

    声明

    1. FROM_DAYS(N)

    说明

    返回指定天数N对应的DATE值。天数指距离0000-01-01的天数。

    示例

    1. OceanBase (root@test)> SELECT FROM_DAYS(736271), FROM_DAYS(700000);
    2. +-------------------+-------------------+
    3. | FROM_DAYS(736271) | FROM_DAYS(700000) |
    4. +-------------------+-------------------+
    5. | 2015-11-04 | 1916-07-15 |
    6. +-------------------+-------------------+
    7. 1 row in set (0.00 sec)

    FROM_UNIXTIME

    声明

    1. FROM_UNIXTIME(unix_timestamp)
    2. FROM_UNIXTIME(unix_timestamp, format)

    说明

    • 不指定format参数时,返回DATETIME类型值,不考虑时区。
    • 指定format参数时,返回指定格式的日期时间字符串。

    unix_timestamp指UNIX时间戳,即距离1970-01-01 00:00:00.000000的微秒数。

    format支持的格式已在DATE_FORMAT()说明中列出。

    示例

    1. OceanBase (root@test)> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
    2. +---------------------------------------------------------+
    3. | FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x') |
    4. +---------------------------------------------------------+
    5. | 2018 5th May 08:41:26 2018 |
    6. +---------------------------------------------------------+
    7. 1 row in set (0.01 sec)

    MONTH

    声明

    1. MONTH(date)

    说明

    返回date的月份信息。

    示例

    1. OceanBase (root@test)> SELECT MONTH('2008-02-03');
    2. +---------------------+
    3. | MONTH('2008-02-03') |
    4. +---------------------+
    5. | 2 |
    6. +---------------------+
    7. 1 row in set (0.01 sec)

    NOW

    声明

    1. NOW([scale])

    说明

    CURRENT_TIMESTAMP()

    PERIOD_DIFF

    声明

    1. PERIOD_DIFF(p1, p2)

    说明

    以月份位单位返回两个日期之间的间隔。日期只能包含年月信息,格式只能为YYYYMMYYMM

    示例

    1. OceanBase (root@test)> SELECT PERIOD_DIFF(200802, 200703);
    2. +----------------------------+
    3. | PERIOD_DIFF(200802,200703) |
    4. +----------------------------+
    5. | 11 |
    6. +----------------------------+
    7. 1 row in set (0.01 sec)

    STR_TO_DATE

    声明

    1. STR_TO_DATE(str, format)

    说明

    使用formatstr转换为DATETIME值、DATE值、或TIME值。返回值类型取决于format包含日期时间的哪些部分。

    format支持的格式已在DATE_FORMAT()说明中列出。

    示例

    1. OceanBase (root@test)> SELECT STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r');
    2. +-----------------------------------------------------+
    3. | STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r') |
    4. +-----------------------------------------------------+
    5. | 2014-01-01 05:05:05 |
    6. +-----------------------------------------------------+
    7. 1 row in set (0.01 sec)

    TIME

    声明

    1. TIME(datetime)

    说明

    TIME类型返回datetime的时间信息。

    示例

    1. OceanBase (root@test)> SELECT TIME('2003-12-31 01:02:03');
    2. +-----------------------------+
    3. | TIME('2003-12-31 01:02:03') |
    4. +-----------------------------+
    5. | 01:02:03.000000 |
    6. +-----------------------------+
    7. 1 row in set (0.01 sec)

    TIME_TO_USEC

    声明

    1. TIME_TO_USEC(date)

    说明

    date值转换为距离1970-01-01 00:00:00.000000的微秒数,考虑时区信息。

    date可以表示日期,也可以表示日期时间。

    示例

    1. OceanBase (root@test)> SELECT TIME_TO_USEC('2014-03-25'), TIME_TO_USEC(NOW());
    2. +----------------------------+---------------------+
    3. | TIME_TO_USEC('2014-03-25') | TIME_TO_USEC(NOW()) |
    4. +----------------------------+---------------------+
    5. | 1395676800000000 | 1525528100000000 |
    6. +----------------------------+---------------------+
    7. 1 row in set (0.01 sec)

    TIMEDIFF

    声明

    1. TIMEDIFF(date1, date2)

    说明

    TIME类型返回两个日期时间的时间间隔。

    示例

    1. OceanBase (root@test)> SELECT
    2. -> TIMEDIFF('2015-06-06 12:12:12', '2014-06-05 11:11:11'),
    3. -> TIMEDIFF('2015-06-06 12:12:12', '2015-06-05 11:11:11')
    4. -> \G
    5. *************************** 1. row ***************************
    6. TIMEDIFF('2015-06-06 12:12:12', '2014-06-05 11:11:11'): 838:59:59
    7. TIMEDIFF('2015-06-06 12:12:12', '2015-06-05 11:11:11'): 25:01:01
    8. 1 row in set (0.00 sec)

    TIMESTAMPDIFF

    声明

    1. TIMESTAMPDIFF(unit, date1, date2)

    说明

    unit为单位返回两个日期时间的间隔。unit只能为DATE_ADD()中的独立单位。

    示例

    1. OceanBase (root@test)> SELECT
    2. -> TIMESTAMPDIFF(SECOND, NOW(), '2011-01-01 11:11:11'),
    3. -> TIMESTAMPDIFF(DAY, '2011-01-01 11:11:11', NOW())
    4. -> \G
    5. *************************** 1. row ***************************
    6. TIMESTAMPDIFF(SECOND, NOW(), '2011-01-01 11:11:11'): -231677498
    7. TIMESTAMPDIFF(DAY, '2011-01-01 11:11:11', NOW()): 2681
    8. 1 row in set (0.00 sec)

    TIMESTAMPADD

    声明

    1. TIMESTAMPADD(unit, interval_expr, date)

    说明

    日期时间的算术计算。

    DATE_ADD(),但unit只能为独立单位。

    示例

    1. OceanBase (root@test)> SELECT
    2. -> TIMESTAMPADD(DAY, -5, '2010-01-01 00:00:00'),
    3. -> DATE_ADD('2010-01-01 00:00:00', INTERVAL -5 DAY)
    4. -> \G
    5. *************************** 1. row ***************************
    6. TIMESTAMPADD(DAY, -5, '2010-01-01 00:00:00'): 2009-12-27 00:00:00
    7. DATE_ADD('2010-01-01 00:00:00', INTERVAL -5 DAY): 2009-12-27 00:00:00
    8. 1 row in set (0.01 sec)

    TO_DAYS

    声明

    1. TO_DAYS(date)

    说明

    返回指定date值对应的天数。天数指距离0000-01-01的天数。

    示例

    1. OceanBase (root@test)> SELECT TO_DAYS('2015-11-04'), TO_DAYS('20151104');
    2. +-----------------------+---------------------+
    3. | TO_DAYS('2015-11-04') | TO_DAYS('20151104') |
    4. +-----------------------+---------------------+
    5. | 736271 | 736271 |
    6. +-----------------------+---------------------+
    7. 1 row in set (0.01 sec)

    USEC_TO_TIME

    声明

    1. USEC_TO_TIME(usec)

    说明

    usec值转换为TIMESTAMP类型值。

    usec表示距离1970-01-01 00:00:00.000000的微秒数,考虑时区信息。

    示例

    1. OceanBase (root@test)> SELECT USEC_TO_TIME(1);
    2. +----------------------------+
    3. | USEC_TO_TIME(1) |
    4. +----------------------------+
    5. | 1970-01-01 08:00:00.000001 |
    6. +----------------------------+
    7. 1 row in set (0.00 sec)

    UNIX_TIMESTAMP

    声明

    1. UNIX_TIMESTAMP()
    2. UNIX_TIMESTAMP(date)

    说明

    • 不指定date参数时,返回当前时间距离’1970-01-01 00:00:00’的秒数,考虑时区。

    • 指定date参数时,返回指定时间距离’1970-01-01 00:00:00’的秒数,考虑时区。

    示例

    1. OceanBase (root@test)> SELECT UNIX_TIMESTAMP(), TIME_TO_USEC(NOW());
    2. +------------------+---------------------+
    3. | UNIX_TIMESTAMP() | TIME_TO_USEC(NOW()) |
    4. +------------------+---------------------+
    5. | 1525570561 | 1525570561000000 |
    6. +------------------+---------------------+
    7. 1 row in set (0.01 sec)
    8. OceanBase (root@test)> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
    9. +---------------------------------------+
    10. | UNIX_TIMESTAMP('1997-10-04 22:23:00') |
    11. +---------------------------------------+
    12. | 875974980 |
    13. +---------------------------------------+
    14. 1 row in set (0.01 sec)

    UTC_TIMESTAMP

    声明

    1. UTC_TIMESTAMP()

    说明

    返回当前UTC时间。

    示例

    1. OceanBase (root@test)> SELECT UTC_TIMESTAMP();
    2. +---------------------+
    3. | UTC_TIMESTAMP() |
    4. +---------------------+
    5. | 2018-05-06 01:38:32 |
    6. +---------------------+
    7. 1 row in set (0.01 sec)

    YEAR

    声明

    1. YEAR(date)

    说明

    返回date值的年份信息。

    示例

    1. OceanBase (root@test)> SELECT YEAR('1987-01-01');
    2. +--------------------+
    3. | YEAR('1987-01-01') |
    4. +--------------------+
    5. | 1987 |
    6. +--------------------+
    7. 1 row in set (0.00 sec)

    字符串函数

    CONCAT

    声明

    1. CONCAT(str1, .., strN)

    说明

    把多个字符串连接成一个字符串。参数中包含NULL时,返回NULL

    示例

    1. OceanBase (root@test)> SELECT
    2. -> CONCAT('test','OceanBase', '1.0'),
    3. -> CONCAT('test','OceanBase', NULL)
    4. -> \G
    5. *************************** 1. row ***************************
    6. CONCAT('test','OceanBase', '1.0'): testOceanBase1.0
    7. CONCAT('test','OceanBase', NULL): NULL
    8. 1 row in set (0.01 sec)

    CONCAT_WS

    声明

    1. CONCAT_WS(separator, str1, .., strN)

    说明

    把多个字符串连接成一个字符串,相邻字符串间使用separator分隔。参数中包含NULL时,将忽略NULL

    示例

    1. OceanBase (root@test)> SELECT
    2. -> CONCAT_WS('_', 'First', 'Second'),
    3. -> CONCAT_WS('_', 'First', NULL, 'Second')
    4. -> \G
    5. *************************** 1. row ***************************
    6. CONCAT_WS('_', 'First', 'Second'): First_Second
    7. CONCAT_WS('_', 'First', NULL, 'Second'): First_Second
    8. 1 row in set (0.00 sec)

    SUBSTR

    声明

    1. SUBSTR(str, pos)
    2. SUBSTR(str, pos, len)
    3. SUBSTR(str FROM pos)
    4. SUBSTR(str FROM pos FOR len)

    说明

    返回str的子字符串,起始位置为pos,长度为len。参数中包含NULL时,返回NULL

    • 不指定len时,返回的子字符串从pos位置开始到str结尾。

    • pos值为负数时,从str尾部向头部倒序确定起始位置。

    • len小于等于0,或pos指定的起始位置非法时,返回空字符串。

    示例

    1. OceanBase (root@test)> SELECT
    2. -> SUBSTR('abcdefg', 3),
    3. -> SUBSTR('abcdefg', 3, 2),
    4. -> SUBSTR('abcdefg', -3),
    5. -> SUBSTR('abcdefg', 3, -2),
    6. -> SUBSTR('abcdefg' from -4 for 2)
    7. -> \G
    8. *************************** 1. row ***************************
    9. SUBSTR('abcdefg', 3): cdefg
    10. SUBSTR('abcdefg', 3, 2): cd
    11. SUBSTR('abcdefg', -3): efg
    12. SUBSTR('abcdefg', 3, -2):
    13. SUBSTR('abcdefg' from -4 for 2): de
    14. 1 row in set (0.01 sec)

    SUBSTRING

    声明

    1. SUBSTRING(str, pos)
    2. SUBSTRING(str, pos, len)
    3. SUBSTRING(str FROM pos)
    4. SUBSTRING(str FROM pos FOR len)

    说明

    SUBSTR

    TRIM

    声明

    1. TRIM([[{BOTH | LEADING | TRAILING}] [remstr] FROM] str)

    说明

    删除字符串所有前缀和/或后缀,默认为BOTH。参数中包含NULL时,返回NULL

    示例

    1. OceanBase (root@test)> SELECT
    2. -> TRIM(' bar '),
    3. -> TRIM(LEADING 'x' FROM 'xxxbarxxx'),
    4. -> TRIM(BOTH 'x' FROM 'xxxbarxxx'),
    5. -> TRIM(TRAILING 'x' FROM 'xxxbarxxx')
    6. -> \G
    7. *************************** 1. row ***************************
    8. TRIM(' bar '): bar
    9. TRIM(LEADING 'x' FROM 'xxxbarxxx'): barxxx
    10. TRIM(BOTH 'x' FROM 'xxxbarxxx'): bar
    11. TRIM(TRAILING 'x' FROM 'xxxbarxxx'): xxxbar
    12. 1 row in set (0.01 sec)

    LTRIM

    声明

    1. LTRIM(str)

    说明

    删除字符串左侧的空格。

    RTRIM

    声明

    1. RTRIM(str)

    说明

    删除字符串右侧的空格。

    ASCII

    声明

    1. ASCII(str)

    说明

    返回字符串最左侧字符的ASCII码。

    ORD

    声明

    1. ORD(str)

    说明

    返回字符串最左侧字符的字符码。单字节编码如果最左侧字符是多字节编码字符,返回值计算规则如下:

    1. (1st byte code)
    2. + (2nd byte code * 256)
    3. + (3rd byte code * 256^2) ...

    示例

    1. OceanBase (root@test)> SELECT ORD('中国');
    2. +---------------+
    3. | ORD('中国') |
    4. +---------------+
    5. | 14989485 |
    6. +---------------+
    7. 1 row in set (0.01 sec)

    LENGTH

    声明

    1. LENGTH(str)

    说明

    返回str的字节长度。

    示例

    1. OceanBase (root@test)> SELECT LENGTH('中国'), LENGTH('hello');
    2. +------------------+-----------------+
    3. | LENGTH('中国') | LENGTH('hello') |
    4. +------------------+-----------------+
    5. | 6 | 5 |
    6. +------------------+-----------------+
    7. 1 row in set (0.01 sec)

    CHAR_LENGTH

    声明

    1. CHAR_LENGTH(str)

    说明

    返回字符串包含的字符数。

    示例

    1. OceanBase (root@test)> SELECT CHAR_LENGTH('中国'), CHAR_LENGTH('hello');
    2. +-----------------------+----------------------+
    3. | CHAR_LENGTH('中国') | CHAR_LENGTH('hello') |
    4. +-----------------------+----------------------+
    5. | 2 | 5 |
    6. +-----------------------+----------------------+
    7. 1 row in set (0.00 sec)

    UPPER

    声明

    1. UPPER(str)

    说明

    将字符串中的小写字母转化为大写字母。

    示例

    1. OceanBase (root@test)> SELECT UPPER('OceanBase您好!');
    2. +-----------------------------+
    3. | UPPER('OceanBase您好!') |
    4. +-----------------------------+
    5. | OCEANBASE您好! |
    6. +-----------------------------+
    7. 1 row in set (0.01 sec)

    LOWER

    声明

    1. LOWER(str)

    说明

    将字符串中的大写字母转化为小写字母。

    示例

    1. OceanBase (root@test)> SELECT LOWER('OceanBase您好!');
    2. +-----------------------------+
    3. | LOWER('OceanBase您好!') |
    4. +-----------------------------+
    5. | oceanbase您好! |
    6. +-----------------------------+
    7. 1 row in set (0.01 sec)

    HEX

    声明

    1. HEX(str)

    说明

    将数字或字符串转化为十六进制字符串。

    示例

    1. OceanBase (root@test)> SELECT HEX(255), HEX('abc');
    2. +----------+------------+
    3. | HEX(255) | HEX('abc') |
    4. +----------+------------+
    5. | FF | 616263 |
    6. +----------+------------+
    7. 1 row in set (0.00 sec)

    UNHEX

    声明

    1. UNHEX(str)

    说明

    将十六进制字符串转化为正常字符串。

    示例

    1. OceanBase (root@test)> SELECT UNHEX('4f6365616e42617365');
    2. +-----------------------------+
    3. | UNHEX('4f6365616e42617365') |
    4. +-----------------------------+
    5. | OceanBase |
    6. +-----------------------------+
    7. 1 row in set (0.00 sec)

    MD5

    声明

    1. MD5(str)

    说明

    返回字符串的MD5值。

    示例

    1. OceanBase (root@test)> SELECT MD5(1);
    2. +----------------------------------+
    3. | MD5(1) |
    4. +----------------------------------+
    5. | c4ca4238a0b923820dcc509a6f75849b |
    6. +----------------------------------+
    7. 1 row in set (0.00 sec)

    INT2IP

    声明

    1. INT2IP(int_value)

    说明

    将整数内码转换成IP地址。

    示例

    1. OceanBase (root@test)> SELECT
    2. -> INT2IP(16777216),
    3. -> HEX(16777216),
    4. -> INT2IP(1)
    5. -> \G
    6. *************************** 1. row ***************************
    7. INT2IP(16777216): 1.0.0.0
    8. HEX(16777216): 1000000
    9. INT2IP(1): 0.0.0.1
    10. 1 row in set (0.01 sec)

    IP2INT

    声明

    1. IP2INT('ip_addr')

    说明

    将IP地址转换成整数内码。

    示例

    1. OceanBase (root@test)> SELECT
    2. -> IP2INT('0.0.0.1'),
    3. -> HEX(IP2INT('0.0.0.1')),
    4. -> HEX(IP2INT('1.0.0.0'))
    5. -> \G
    6. *************************** 1. row ***************************
    7. IP2INT('0.0.0.1'): 1
    8. HEX(IP2INT('0.0.0.1')): 1
    9. HEX(IP2INT('1.0.0.0')): 1000000
    10. 1 row in set (0.01 sec)

    LIKE

    声明

    1. str1 [NOT] LIKE str2 [ESCAPE str3]

    说明

    字符串通配符匹配。参数中包含NULL时,返回NULL

    通配符包括:

    • %:匹配任意长度字符串。

    • _:匹配单个字符。

    ESCAPE用于定义转义符,如果str2中包含str3,在匹配时str3后的字符将做为普通字符处理。

    示例

    1. OceanBase (root@test)> SELECT 'ab%' LIKE 'abc%' ESCAPE 'c';
    2. +------------------------------+
    3. | 'ab%' LIKE 'abc%' ESCAPE 'c' |
    4. +------------------------------+
    5. | 1 |
    6. +------------------------------+
    7. 1 row in set (0.01 sec)

    REGEXP

    声明

    1. str [NOT] REGEXP | RLIKE pat

    说明

    正则匹配。参数中包含NULL时,返回NULL

    示例

    1. OceanBase (root@test)> SELECT
    2. -> 1234 REGEXP 1,
    3. -> 'hello' RLIKE 'h%'
    4. -> \G
    5. *************************** 1. row ***************************
    6. 1234 REGEXP 1: 1
    7. 'hello' RLIKE 'h%': 0
    8. 1 row in set (0.01 sec)

    REPEAT

    声明

    1. REPEAT(str, count)

    说明

    返回str重复count次组成的字符串。count小于等于0时,返回空字符串。参数中包含NULL时,返回NULL

    示例

    1. OceanBase (root@test)> SELECT
    2. -> REPEAT('1', -1),
    3. -> REPEAT(null, null),
    4. -> REPEAT('Abc', 4)
    5. -> \G
    6. *************************** 1. row ***************************
    7. REPEAT('1', -1):
    8. REPEAT(null, null): NULL
    9. REPEAT('Abc', 4): AbcAbcAbcAbc
    10. 1 row in set (0.01 sec)

    SPACE

    声明

    1. SPACE(N)

    说明

    返回包含N个空格的字符串。

    SUBSTRING_INDEX

    声明

    1. SUBSTRING_INDEX(str, delim, count)

    说明

    在定界符 delim 以及 count 出现前,从字符串 str 返回字符串。若 count 为正值,则返回最终定界符(从左边开始)左边的一切内容。若 count 为负值,则返回定界符(从右边开始)右边的一切内容。任意一个参数为NULL,返回NULL;若 strdelim 为空字符串,则返回空串;若 count = 0, 返回空串。

    str, delim, count 参数支持数值与字符串的隐式转换。

    示例

    1. Oceanbase>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;
    2. * 1. row *
    3. substring_index('abcdabc', 'abc', 0):
    4. substring_index('abcdabc', 'abc', 1):
    5. substring_index('abcdabc', 'abc', 2): abcd
    6. substring_index('abcdabc', 'abc', 3): abcdabc
    7. substring_index('abcdabc', 'abc', -1):
    8. substring_index('abcdabc', 'abc', -2): dabc
    9. substring_index('abcdabc', 'abc', -3): abcdabc
    10. 1 row in set (0.00 sec)

    LOCATE

    声明

    LOCATE(substr,str) , LOCATE(substr,str,pos)

    说明

    第一个语法返回字符串 str 中子字符串 substr 的第一个出现位置。第二个语法返回字符串 str 中子字符串 substr 的第一个出现位置, 起始位置在 pos。如若 substr 不在 str 中,则返回值为 0。

    示例

    1. Oceanbase>SELECT LOCATE('bar', 'foobarbar');
    2. -> 4
    3. Oceanbase>SELECT LOCATE('xbar', 'foobar');
    4. -> 0
    5. Oceanbase>SELECT LOCATE('bar', 'foobarbar',5);
    6. -> 7

    POSITION

    声明

    POSITION(substr IN str)

    说明

    与LOCATE同义。

    INSTR

    声明

    INSTR(str,substr)

    说明

    返回字符串 str 中子字符串的第一个出现位置。这和 LOCATE() 的双参数形式相同,除非参数的顺序被颠倒。

    示例

    1. Oceanbase>SELECT INSTR('foobarbar', 'bar');
    2. -> 4
    3. Oceanbase>SELECT INSTR('xbar', 'foobar');
    4. -> 0

    REPLACE

    声明

    REPLACE(str, from_str, to_str)

    说明

    返回字符串 str 以及所有被字符 to_str 替代的字符串 from_str

    示例

    1. Oceanbase>SELECT REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www');
    2. +---------------------------------------------------------+
    3. | REPLACE('abc.efg.gpg.nowdew.abc.dabc.e', 'abc.', 'www') |
    4. +---------------------------------------------------------+
    5. | wwwefg.gpg.nowdew.wwwdwwwe |
    6. +---------------------------------------------------------+
    7. 1 row in set (0.00 sec)

    FIELD

    声明

    FIELD(str,str1,str2,str3,…)

    说明

    返回参数 strstr1, str2, str3,… 列表中的索引位置(从1开始的位置)。在找不到 str 的情况下,返回值为0。

    如果所有的对于 FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数均按照 double 类型进行比较。

    如果 str 为 NULL,则返回值为 0,原因是 NULL 不能同任何值进行同等比较。FILED() 是 ELT() 的补数。

    示例

    1. Oceanbase>select field('abc','abc1','abc2','abc','abc4','abc'), field(NULL, 'null1', NULL);
    2. +-----------------------------------------------+----------------------------+
    3. | field('abc','abc1','abc2','abc','abc4','abc') | field(NULL, 'null1', NULL) |
    4. +-----------------------------------------------+----------------------------+
    5. | 3 | 0 |
    6. +-----------------------------------------------+----------------------------+
    7. 1 row in set (0.00 sec)

    ELT

    声明

    ELT(N, str1, str2, str3,…)

    说明

    若 N=1,则返回值为 str1, 若 N=2,则返回值为 str2,以此类推。若 N 小于 1 或大于参数的数目,则返回值为NULL。ELT() 是 FIELD() 的补数。

    示例

    1. Oceanbase>select elt(3, 'abc1', 'abc2', 'abc', 'abc4', 'abc'), elt(0, 'null1', NULL);
    2. +----------------------------------------------+-----------------------+
    3. | elt(3, 'abc1', 'abc2', 'abc', 'abc4', 'abc') | elt(0, 'null1', NULL) |
    4. +----------------------------------------------+-----------------------+
    5. | abc | NULL |
    6. +----------------------------------------------+-----------------------+
    7. 1 row in set (0.00 sec)

    INSERT

    声明

    INSERT (str1,pos,len,str2)

    说明

    返回字符串 str1, 字符串中起始于 pos 位置,长度为 len 的子字符串将被 str2 取代。如果 pos 超过字符串长度,则返回值为原始字符串。 假如 len 的长度大于其它字符串的长度,则从位置 pos 开始替换。若任何一个参数为 null,则返回值为 NULL。这个函数支持多字节字元。

    • str1str2 必须是字符串,poslen 必须是整数。任意参数为 NULL,结果总为 NULL。

    • str1str2 中的文字符被当做字节流看待。

    • pos 值为负数或者大于 str1 长度时,返回 str1

    • len 小于 0,或大于 str1 的长度时,返回结果为 str1 从开头到 pos 位置的串,和 str2 的组合串。

    示例

    1. Oceanbase>select insert('Quadratic',-2,100,'What'), insert('Quadratic',7,3,'What'),
    2. -> insert('Quadratic',-1,3,'What'), insert('Quadratic',10,3,'What'), insert('Quadratic',5,-1,''),
    3. -> insert('Quadratic',7,-1,'What')\G;
    4. * 1. row *
    5. insert('Quadratic',-2,100,'What'): Quadratic
    6. insert('Quadratic',7,3,'What'): QuadraWhat
    7. insert('Quadratic',-1,3,'What'): Quadratic
    8. insert('Quadratic',10,3,'What'): Quadratic
    9. insert('Quadratic',5,-1,''): Quad
    10. insert('Quadratic',7,-1,'What'): QuadraWhat
    11. 1 row in set (0.01 sec)

    LPAD

    声明

    LPAD(str, len, padstr)

    说明

    用指定字符串padstr,在左侧填充字符串str到指定长度len。如果str长度大于len,则str被截断。

    示例

    1. OceanBase > SELECT LPAD('hi',4,'??');
    2. +-------------------+
    3. | LPAD('hi',4,'??') |
    4. +-------------------+
    5. | ??hi |
    6. +-------------------+
    7. 1 row in set (0.01 sec)
    8. OceanBase > SELECT LPAD('hi',1,'??');
    9. +-------------------+
    10. | LPAD('hi',1,'??') |
    11. +-------------------+
    12. | h |
    13. +-------------------+
    14. 1 row in set (0.00 sec)

    RPAD

    声明

    RPAD(str, len, padstr)

    说明

    用指定字符串padstr,在右侧填充字符串str到指定长度len。如果str长度大于len,则str被截断。

    示例

    1. OceanBase (root@test)> SELECT RPAD('hi',4,'??');
    2. +-------------------+
    3. | RPAD('hi',4,'??') |
    4. +-------------------+
    5. | hi?? |
    6. +-------------------+
    7. 1 row in set (0.00 sec)
    8. OceanBase (root@test)> SELECT RPAD('hi',1,'??');
    9. +-------------------+
    10. | RPAD('hi',1,'??') |
    11. +-------------------+
    12. | h |
    13. +-------------------+
    14. 1 row in set (0.00 sec)

    UUID

    声明

    uuid()

    说明

    生成一个全局唯一ID。

    示例

    1. OceanBase (root@test)> select uuid();
    2. +--------------------------------------+
    3. | uuid() |
    4. +--------------------------------------+
    5. | f756a1f6-4de6-11e8-90af-90b11c53e421 |
    6. +--------------------------------------+
    7. 1 row in set (0.00 sec)

    BIN

    声明

    bin(N)

    说明

    返回数字N的二进制形式。

    示例

    1. OceanBase > SELECT BIN(12);
    2. +---------+
    3. | BIN(12) |
    4. +---------+
    5. | 1100 |
    6. +---------+
    7. 1 row in set (0.00 sec)

    QUOTE

    声明

    quote(str)

    说明

    引用一个字符串以产生一个结果可以作为SQL语句中正确地转义数据值。返回的字符串由单引号和单引号的各个实例封闭(‘’),反斜线(‘’),ASCII NUL 和 Control-Z前面加一个反斜杠。如果参数为NULL,则返回值是词 ‘NULL’ 不包围单引号。

    示例

    1. OceanBase > SELECT QUOTE('Don\'t!');
    2. +------------------+
    3. | QUOTE('Don\'t!') |
    4. +------------------+
    5. | 'Don\'t!' |
    6. +------------------+
    7. 1 row in set (0.00 sec)
    8. OceanBase > SELECT QUOTE(NULL);
    9. +-------------+
    10. | QUOTE(NULL) |
    11. +-------------+
    12. | NULL |
    13. +-------------+
    14. 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的子串。

    示例

    1. oceanbase> select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) from dual;
    2. +----------------------------------------------------------------------------------+
    3. | regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) |
    4. +----------------------------------------------------------------------------------+
    5. | have |
    6. +----------------------------------------------------------------------------------+
    7. 1 row in set (0.00 sec)
    8. oceanbase> select regexp_substr('foothebar', 'foo(.*)(bar)', 1, 1, 'c', 1) from dual;
    9. +----------------------------------------------------------+
    10. | regexp_substr('foothebar', 'foo(.*)(bar)', 1, 1, 'c', 1) |
    11. +----------------------------------------------------------+
    12. | the |
    13. +----------------------------------------------------------+
    14. 1 row in set (0.01 sec)

    转换函数

    CAST

    声明

    CAST(expr AS type)

    说明

    将某种数据类型的表达式显式转换为另一种数据类型。

    expr 字段值转换为 type 数据类型。

    参数说明

    • expr : 表示任何有效的SQL表达式。
    • AS : 用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
    • type : 表示目标系统所提供的数据类型。可以是以下值其中的一个:

    • CHAR[(N)] (CHAR[N]会使 cast 使用该参数的不多于N 个字符)

    • DATE
    • DATETIME
    • DECIMAL
    • SIGNED [INTEGER]
    • TIME
    • UNSIGNED [INTEGER]

    在使用CAST函数进行数据类型转换时,在下列情况下能够被接受:

    • 两个表达式的数据类型完全相同;

    • 两个表达式可隐式转换;

    • 必须显式转换数据类型。

    如果试图进行不可能的转换,OceanBase将显示一条错误信息。

    如果转换时没有指定数据类型的长度,则使用 OceanBase系统内部最大长度。如varchar是262,143字节,number是65个bit位的浮动精度。

    支持带符号和无符号的64比特值的运算。若你正在使用数字操作符 (如 +) 而其中一个操作数为无符号整数,则结果为无符号。可使用SIGNED 和UNSIGNED cast操作符来覆盖它。将运算分别派给带符号或无符号64比特整数。

    假如任意一个操作数为一个浮点值,则结果为一个浮点值。

    示例

    1. Oceanbase>SELECT CAST(123 AS BOOL);
    2. +-------------------+
    3. | CAST(123 AS bool) |
    4. +-------------------+
    5. | 1 |
    6. +-------------------+
    7. 1 row in set (0.00 sec)
    8. Oceanbase>select cast(1-2 as unsigned), cast(cast(1-2 as unsigned) as signed);
    9. +-----------------------+---------------------------------------+
    10. | cast(1-2 as unsigned) | cast(cast(1-2 as unsigned) as signed) |
    11. +-----------------------+---------------------------------------+
    12. | 18446744073709551615 | -1 |
    13. +-----------------------+---------------------------------------+
    14. 1 row in set (0.00 sec)
    15. Oceanbase>SELECT CAST(1 AS UNSIGNED) - 2.0;
    16. +---------------------------+
    17. | CAST(1 AS UNSIGNED) - 2.0 |
    18. +---------------------------+
    19. | -1.0 |
    20. +---------------------------+
    21. 1 row in set (0.00 sec)
    22. Oceanbase>select cast(0 as date);
    23. +-----------------+
    24. | cast(0 as date) |
    25. +-----------------+
    26. | 0000-00-00 |
    27. +-----------------+
    28. 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()遵循银行家规则“四舍—大于五入—五取最接近的偶数”的规则: 一个带有任何小数部分的值会被舍入成最接近的偶数整数。

    示例

    1. Oceanbase>select round(2.15,2);
    2. +---------------+
    3. | round(2.15,2) |
    4. +---------------+
    5. | 2.15 |
    6. +---------------+
    7. 1 row in set (0.00 sec)
    8. Oceanbase>select round(2555e-2,1);
    9. +------------------+
    10. | round(2555e-2,1) |
    11. +------------------+
    12. | 25.6 |
    13. +------------------+
    14. 1 row in set (0.01 sec)
    15. Oceanbase>select round(25e-1), round(25.3e-1),round(35e-1);
    16. +--------------+----------------+--------------+
    17. | round(25e-1) | round(25.3e-1) | round(35e-1) |
    18. +--------------+----------------+--------------+
    19. | 3 | 3 | 4 |
    20. +--------------+----------------+--------------+
    21. 1 row in set (0.00 sec)

    CEIL

    声明

    CEIL(expr)

    说明

    返回大于或者等于指定表达式的最小整数。

    还支持比较运算,结果为BOOL值,被转化为数字类型处理,产生的结果为1(TRUE)、0 (FALSE);

    如果输入NULL,返回值为NULL。

    如果输入纯数字的字符串,支持自动转换成数字类型。

    返回值会被转化为一个BIGINT。

    示例

    1. Oceanbase>select ceil(1.2), ceil(-1.2), ceil(1+1.5), ceil(1=1),ceil(1<1),ceil(null);
    2. +-----------+------------+-------------+-----------+-----------+------------+
    3. | ceil(1.2) | ceil(-1.2) | ceil(1+1.5) | ceil(1=1) | ceil(1<1) | ceil(null) |
    4. +-----------+------------+-------------+-----------+-----------+------------+
    5. | 2 | -1 | 3 | 1 | 0 | NULL |
    6. +-----------+------------+-------------+-----------+-----------+------------+
    7. 1 row in set (0.00 sec)
    8. Oceanbase>select ceil(name);
    9. ERROR 1166 (42703): Unkown column name 'name'
    10. Oceanbase>select ceil('2');
    11. +-----------+
    12. | ceil('2') |
    13. +-----------+
    14. | 2 |
    15. +-----------+
    16. 1 row in set (0.00 sec)

    FLOOR

    声明

    FLOOR(expr)

    说明

    和CEIL(expr)函数功能类似,返回小于或者等于指定表达式的最大整数。

    还支持比较运算,结果为BOOL值,被转化为数字类型处理,产生的结果为1(TRUE)、0 (FALSE);

    如果输入NULL,返回值为NULL。

    如果输入纯数字的字符串,支持自动转换成数字类型。

    返回值会被转化为一个BIGINT。

    示例

    1. Oceanbase>select floor(1.2), floor(-1.2), floor(1+1.5), floor(1=1),floor(1<1),floor(null);
    2. +------------+-------------+--------------+------------+------------+-------------+
    3. | floor(1.2) | floor(-1.2) | floor(1+1.5) | floor(1=1) | floor(1<1) | floor(null) |
    4. +------------+-------------+--------------+------------+------------+-------------+
    5. | 1 | -2 | 2 | 1 | 0 | NULL |
    6. +------------+-------------+--------------+------------+------------+-------------+
    7. 1 row in set (0.00 sec)
    8. Oceanbase>select floor(name);
    9. ERROR 1166 (42703): Unkown column name 'name'
    10. Oceanbase>select floor('2');
    11. +------------+
    12. | floor('2') |
    13. +------------+
    14. | 2 |
    15. +------------+
    16. 1 row in set (0.00 sec)

    ABS

    声明

    ABS(expr)

    说明

    绝对值函数,求表达式绝对值,函数返回值类型与数值表达式的数据类型相同。

    还支持比较运算,结果为BOOL值,被转化为数字类型处理,产生的结果为1(TRUE)、0 (FALSE);

    如果输入NULL,返回值为NULL。

    如果输入纯数字的字符串,支持自动转换成数字类型。

    返回值会被转化为一个BIGINT。

    示例

    1. Oceanbase>select abs(5), abs(-5.777), abs(0), abs(1/2), abs(1-5);
    2. +--------+-------------+--------+----------+----------+
    3. | abs(5) | abs(-5.777) | abs(0) | abs(1/2) | abs(1-5) |
    4. +--------+-------------+--------+----------+----------+
    5. | 5 | 5.777 | 0 | 0.5000 | 4 |
    6. +--------+-------------+--------+----------+----------+
    7. 1 row in set (0.00 sec)

    NEG

    声明

    NEG(expr)

    说明

    求补函数,对操作数执行求补运算:用零减去操作数,然后结果返回操作数。

    支持比较运算,结果为BOOL值,被转化为数字类型处理,产生的结果为1(TRUE)、0 (FALSE),再对结果求补。

    示例

    1. Oceanbase>select neg(1), neg(1+1), neg(2*3), neg(1=1), neg(5<1);
    2. +--------+----------+----------+----------+----------+
    3. | neg(1) | neg(1+1) | neg(2*3) | neg(1=1) | neg(5<1) |
    4. +--------+----------+----------+----------+----------+
    5. | -1 | -2 | -6 | -1 | 0 |
    6. +--------+----------+----------+----------+----------+
    7. 1 row in set (0.01 sec)

    SIGN

    声明

    SIGN(X)

    说明

    SIGN(X)返回参数作为-1、 0或1的符号,该符号取决于X的值为负、零或正。

    支持比较运算,结果为BOOL值,被转化为数字类型处理,产生的结果为1(TRUE)、0 (FALSE);

    如果输入NULL,返回值为NULL。

    支持浮点数、十六进制数。

    示例

    1. Oceanbase>SELECT SIGN(-32), SIGN(0), SIGN(234);
    2. +-----------+---------+-----------+
    3. | SIGN(-32) | SIGN(0) | SIGN(234) |
    4. +-----------+---------+-----------+
    5. | -1 | 0 | 1 |
    6. +-----------+---------+-----------+
    7. 1 row in set (0.01 sec)
    8. Oceanbase>select sign(null),sign(false),sign(0x01);
    9. +------------+-------------+------------+
    10. | sign(null) | sign(false) | sign(0x01) |
    11. +------------+-------------+------------+
    12. | NULL | 0 | 1 |
    13. +------------+-------------+------------+
    14. 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_baseto_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]。

    示例

    1. Oceanbase>select conv(9223372036854775807,10,2);
    2. +-----------------------------------------------------------------+
    3. | conv(9223372036854775807,10,2) |
    4. +-----------------------------------------------------------------+
    5. | 111111111111111111111111111111111111111111111111111111111111111 |
    6. +-----------------------------------------------------------------+
    7. 1 row in set (0.00 sec)
    8. Oceanbase>select conv('-acc',21,-7);
    9. +--------------------+
    10. | conv('-acc',21,-7) |
    11. +--------------------+
    12. | -16425 |
    13. +--------------------+
    14. 1 row in set (0.00 sec)

    MOD

    声明

    MOD(N,M)

    说明

    取余函数。MOD(NM), N % MN MOD M 三种形式是等效的。

    MOD()对于带有小数部分的数值也起作用,它返回除法运算后的精确余数。

    N、M 中任何一个参数为 NULL,返回值都为 NULL。M 为 0 时,也返回 NULL。

    示例

    1. Oceanbase>select mod(29,19), 29 mod 19, 29 % 19;
    2. +------------+-----------+---------+
    3. | mod(29,19) | 29 mod 19 | 29 % 19 |
    4. +------------+-----------+---------+
    5. | 10 | 10 | 10 |
    6. +------------+-----------+---------+
    7. 1 row in set (0.00 sec)

    POW

    声明

    POW(X,Y)

    说明

    返回X的Y次方。

    X与Y中任何一个参数为NULL,返回值都为NULL。

    示例

    1. Oceanbase>select pow(4,2), pow(4,-2), pow(1,null);
    2. +----------+-----------+-------------+
    3. | pow(4,2) | pow(4,-2) | pow(1,null) |
    4. +----------+-----------+-------------+
    5. | 16 | 0.0625 | NULL |
    6. +----------+-----------+-------------+
    7. 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。

    示例

    1. mysql> select a, b, rand() from t3;
    2. +------+------+---------------------+
    3. | a | b | rand() |
    4. +------+------+---------------------+
    5. | 1 | 1 | 0.641815407799385 |
    6. | 2 | 2 | 0.16825051248841966 |
    7. | 3 | 3 | 0.9158063697775886 |
    8. +------+------+---------------------+
    9. 3 rows in set (0.00 sec)
    10. mysql> select a, b, rand() from t3;
    11. +------+------+---------------------+
    12. | a | b | rand() |
    13. +------+------+---------------------+
    14. | 1 | 1 | 0.07428034215632857 |
    15. | 2 | 2 | 0.6239826321825224 |
    16. | 3 | 3 | 0.897072165177271 |
    17. +------+------+---------------------+
    18. 3 rows in set (0.00 sec)
    19. mysql> select a, b, rand(3) from t3;
    20. +------+------+---------------------+
    21. | a | b | rand(3) |
    22. +------+------+---------------------+
    23. | 1 | 1 | 0.9057697559760601 |
    24. | 2 | 2 | 0.37307905813034536 |
    25. | 3 | 3 | 0.14808605345719125 |
    26. +------+------+---------------------+
    27. 3 rows in set (0.00 sec)
    28. mysql> select a, b, rand(3) from t3;
    29. +------+------+---------------------+
    30. | a | b | rand(3) |
    31. +------+------+---------------------+
    32. | 1 | 1 | 0.9057697559760601 |
    33. | 2 | 2 | 0.37307905813034536 |
    34. | 3 | 3 | 0.14808605345719125 |
    35. +------+------+---------------------+
    36. 3 rows in set (0.00 sec)
    37. mysql> select a, b, rand(a), rand(b) from t3;
    38. +------+------+---------------------+---------------------+
    39. | a | b | rand(a) | rand(b) |
    40. +------+------+---------------------+---------------------+
    41. | 1 | 1 | 0.40540353712197724 | 0.40540353712197724 |
    42. | 2 | 2 | 0.6555866465490187 | 0.6555866465490187 |
    43. | 3 | 3 | 0.9057697559760601 | 0.9057697559760601 |
    44. +------+------+---------------------+---------------------+
    45. 3 rows in set (0.00 sec)

    比较函数

    GREATEST

    声明

    GREATEST(value1, ...)

    说明

    返回参数的最大值,和函数LEAST()相对。

    参数至少为两个(一个参数将会报错);如果参数中有NULL, 返回值为NULL。

    当参数中同时存在数值和字符时,把字符隐式转换为数值类型处理,不能转换的报错。

    示例

    1. Oceanbase>select greatest(2,1), greatest('2',1,0), greatest('a','b','c'), greatest('a', NULL, 'c'), greatest('2014-05-15','2014-06-01')\G
    2. * 1. row *
    3. greatest(2,1): 2
    4. greatest('2',1,0): 2
    5. greatest('a','b','c'): c
    6. greatest('a', NULL, 'c'): NULL
    7. greatest('2014-05-15','2014-06-01'): 2014-06-01
    8. 1 row in set (0.01 sec)
    9. Oceanbase>select greatest(2);
    10. ERROR 1582 (42000): Incorrect parameter count in the call to native function 'greatest'

    LEAST

    声明

    LEAST(value1, ...)

    说明

    返回参数的最小值,和函数GREATEST()相对。

    参数至少为两个;如果参数中有NULL,返回值为NULL。

    当参数中同时存在数值和字符时,把字符隐式转换为数值类型处理,不能转换的报错。

    示例

    1. Oceanbase>select least(2, null), least('2',4,9), least('a','b','c'), least('a',NULL,'c'), least('2014-05-15','2014-06-01')\G;
    2. * 1. row *
    3. least(2, null): NULL
    4. least('2',4,9): 2
    5. least('a','b','c'): a
    6. least('a',NULL,'c'): NULL
    7. least('2014-05-15','2014-06-01'): 2014-05-15
    8. 1 row in set (0.01 sec)
    9. Oceanbase>select least(2);
    10. 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 比较操作符具有一些相同的特性。

    示例

    1. Oceanbase>SELECT ISNULL(null), ISNULL('test'), ISNULL(123.456), ISNULL('10:00');
    2. +--------------+----------------+-----------------+-----------------+
    3. | ISNULL(null) | ISNULL('test') | ISNULL(123.456) | ISNULL('10:00') |
    4. +--------------+----------------+-----------------+-----------------+
    5. | 1 | 0 | 0 | 0 |
    6. +--------------+----------------+-----------------+-----------------+
    7. 1 row in set (0.01 sec)
    8. Oceanbase>SELECT ISNULL(null+1);
    9. +----------------+
    10. | ISNULL(null+1) |
    11. +----------------+
    12. | 1 |
    13. +----------------+
    14. 1 row in set (0.00 sec)

    流程控制函数

    CASE

    声明

    1. CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
    2. OR
    3. CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

    说明

    在第一个方案的返回结果中,value = compare-value。而第二个方案的返回结果是第一种条件为真。如果没有匹配的结果值,则返回结果为 ELSE 后的结果,如果没有 ELSE 部分,则返回值为 NULL。

    示例

    1. Oceanbase>select CASE 'b' when 'a' then 1 when 'b' then 2 END;
    2. +----------------------------------------------+
    3. | CASE 'b' when 'a' then 1 when 'b' then 2 END |
    4. +----------------------------------------------+
    5. | 2 |
    6. +----------------------------------------------+
    7. 1 row in set (0.01 sec)
    8. Oceanbase>select CASE concat('a','b') when concat('ab','') then 'a' when 'b' then 'b' end;
    9. +--------------------------------------------------------------------------+
    10. | CASE concat('a','b') when concat('ab','') then 'a' when 'b' then 'b' end |
    11. +--------------------------------------------------------------------------+
    12. | a |
    13. +--------------------------------------------------------------------------+
    14. 1 row in set (0.01 sec)
    15. Oceanbase>select case when 1>0 then 'true' else 'false' end;
    16. +--------------------------------------------+
    17. | case when 1>0 then 'true' else 'false' end |
    18. +--------------------------------------------+
    19. | true |
    20. +--------------------------------------------+
    21. 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 表达式的结果类型。

    示例

    1. Oceanbase>select if(5>6, 'T','F'), if (5>6, 1, 0), if(null, 'True', 'False'), if(0, 'True', 'False')\G
    2. * 1. row *
    3. if(5>6, 'T','F'): F
    4. if (5>6, 1, 0): 0
    5. if(null, 'True', 'False'): False
    6. if(0, 'True', 'False'): False
    7. 1 row in set (0.01 sec)

    IFNULL

    声明

    IFNULL(expr1, expr2)

    说明

    假设 expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。 IFNULL() 的返回值是数值或字符串,具体情况取决于其所使用的语境。

    IF()的默认返回值类型按照以下方式计算:

    表达式返回值
    expr2 或 expr3 返回值为一个字符串。字符串
    expr2 或 expr3 返回值为一个浮点值。浮点
    expr2 或 expr3 返回值为一个整数。整数

    假如 expr2expr3 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。

    示例

    1. Oceanbase>SELECT IFNULL('abc', null), IFNULL(NULL+1, NULL+2), IFNULL(1/0, 0/1);
    2. +---------------------+------------------------+------------------+
    3. | IFNULL('abc', null) | IFNULL(NULL+1, NULL+2) | IFNULL(1/0, 0/1) |
    4. +---------------------+------------------------+------------------+
    5. | abc | NULL | 0.0000 |
    6. +---------------------+------------------------+------------------+
    7. 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。

    示例

    1. Oceanbase>SELECT NULLIF('ABC', 123), NULLIF('123',123), NULLIF(NULL, 'abc');
    2. +--------------------+-------------------+---------------------+
    3. | NULLIF('ABC', 123) | NULLIF('123',123) | NULLIF(NULL, 'abc') |
    4. +--------------------+-------------------+---------------------+
    5. | ABC | NULL | NULL |
    6. +--------------------+-------------------+---------------------+
    7. 1 row in set, 1 warning (0.01 sec)

    ORA_DECODE

    声明

    ora_decode(条件, 值1, 返回值1, 值2, 返回值2, ... 值n, 返回值n, 缺省值)

    说明

    ORA_DECODE()函数功能等同于Oracle的DECODE()函数功能(OceanBase 1.0兼容MySQL,同时也增加了部分Oracle的函数,这部分Oracle同功能的函数在OceanBase 1.0中被统一命名以ORA_开头 )。

    该函数的含义如下:

    1. IF 条件=值1
    2. THEN RETURN(返回值1)
    3. ELSIF 条件=值2
    4. THEN RETURN(返回值2)
    5. ......
    6. ELSIF 条件=值n
    7. THEN RETURN(返回值n)
    8. ELSE RETURN(缺省值)
    9. END IF