[TOC] # 函数 ## 日期时间函数 日期时间函数主要用来显示有关日期和时间的信息。 #### CURDATE **声明** ~~~ CURDATE() ~~~ **说明** 返回当前日期,不含时间部分。 **例子** ~~~ obclient> SELECT CURDATE(); +------------+ | CURDATE() | +------------+ | 2018-05-05 | +------------+ 1 row in set (0.00 sec) ~~~ #### CURRENT\_DATE **声明** ~~~ CURRENT_DATE() CURRENT_DATE ~~~ **说明** 同`CURDATE()`。 #### CURRENT\_TIME **声明** ~~~ CURRENT_TIME([scale]) ~~~ **说明** 返回当前时间,不含日期部分。 `scale`有效值为 0 到 6,表示微秒部分精度,默认值为 0。 **例子** ~~~ obclient> SELECT CURRENT_TIME(6); +-----------------+ | CURRENT_TIME(6) | +-----------------+ | 11:11:45.215311 | +-----------------+ 1 row in set (0.01 sec) ~~~ #### CURRENT\_TIMESTAMP **声明** ~~~ CURRENT_TIMESTAMP([scale]) ~~~ **说明** 返回当前日期时间,考虑时区设置。 `scale`有效值为 0 到 6,表示微秒部分精度,默认值为 0。 **例子** ~~~ obclient> SELECT CURRENT_TIMESTAMP(6); +----------------------------+ | CURRENT_TIMESTAMP(6) | +----------------------------+ | 2018-05-05 11:35:39.177764 | +----------------------------+ 1 row in set (0.01 sec) ~~~ #### CURTIME **声明** ~~~ CURTIME() ~~~ **说明** 同`CURRENT_TIME()`。 #### DATE\_ADD **声明** ~~~ DATE_ADD(date, INTERVAL expr unit) ~~~ **说明** 日期时间的算术计算。 * `date`表示日期时间基准,日期部分必选,时间部分可选。 * `expr`表示时间间隔,可以为负值。 * `unit`表示时间间隔单位。 以下为所有时间间隔单位列表: <table data-tag="table" id="table-wfl-77i-lr2" class="table"><colgroup span="1" width="180" data-tag="col" id="col-u8o-x0m-bmd" colwidth="1*" colnum="1" colname="col1" style="width:25%" class="col"></colgroup><colgroup span="1" width="180" data-tag="col" id="col-u3b-kp9-lc7" colwidth="1*" colnum="2" colname="col2" style="width:25%" class="col"></colgroup><colgroup span="1" width="180" data-tag="col" id="col-pzo-0rt-fsg" colwidth="1*" colnum="3" colname="col3" style="width:25%" class="col"></colgroup><colgroup span="1" width="180" data-tag="col" id="col-nww-roz-hrt" colwidth="1*" colnum="4" colname="col4" style="width:25%" class="col"></colgroup><thead id="thead-bdd-1oy-lqj" class="thead"><tr id="tr-r6j-7rq-4w2"><th id="td-8pa-170-0lm"><p id="p-3tc-5ge-iqa">单位</p></th><th id="td-zut-twq-ltf"><p id="p-gth-bdr-9uz">类型</p></th><th id="td-fr8-4w6-3fy"><p id="p-eii-ls9-j6d">含义</p></th><th id="td-ek3-jyu-vn9"><p id="p-sb4-zb0-yww">格式</p></th></tr></thead><tbody data-tag="tbody" id="tbody-uwu-faj-bh5" class="tbody"><tr data-tag="tr" id="tr-lp7-9q7-epv" class="tr"><td data-tag="td" id="td-43o-95p-psf" class="td"><p id="p-jb5-f14-4co"><code data-tag="code" class="code">MICROSECOND</code></p></td><td data-tag="td" id="td-7na-vwv-rv1" class="td"><p id="p-a9g-m0z-2wr">独立</p></td><td data-tag="td" id="td-46j-07l-vdo" class="td"><p id="p-qz8-9wq-wb7">微秒</p></td><td data-tag="td" id="td-u0n-onl-5mp" class="td"><p id="p-1t9-kzl-cj2"><code data-tag="code" class="code">MICROSECONDS</code></p></td></tr><tr data-tag="tr" id="tr-71m-b6v-5dl" class="tr"><td data-tag="td" id="td-3d9-h6y-q4p" class="td"><p id="p-1th-2rf-9uw"><code data-tag="code" class="code">SECOND</code></p></td><td data-tag="td" id="td-2c6-hy9-ey3" class="td"><p id="p-gof-gee-ld7">独立</p></td><td data-tag="td" id="td-bq9-f0d-pa4" class="td"><p id="p-bt4-uli-d6s">秒</p></td><td data-tag="td" id="td-jtw-j0i-hdf" class="td"><p id="p-94h-ci5-3lu"><code data-tag="code" class="code">SECONDS</code></p></td></tr><tr data-tag="tr" id="tr-q4g-zn6-nkk" class="tr"><td data-tag="td" id="td-d83-suu-hq4" class="td"><p id="p-ubp-d51-01y"><code data-tag="code" class="code">MINUTE</code></p></td><td data-tag="td" id="td-7ab-64q-7iz" class="td"><p id="p-ir3-hgs-90s">独立</p></td><td data-tag="td" id="td-ek7-cqd-rf9" class="td"><p id="p-ohu-p54-ff5">分钟</p></td><td data-tag="td" id="td-w5c-5y1-6mf" class="td"><p id="p-e68-n45-pxr"><code data-tag="code" class="code">MINUTES</code></p></td></tr><tr data-tag="tr" id="tr-tpw-mve-hx4" class="tr"><td data-tag="td" id="td-4dk-i36-1p9" class="td"><p id="p-i8j-wa6-0jx"><code data-tag="code" class="code">HOUR</code></p></td><td data-tag="td" id="td-b4q-26j-wnj" class="td"><p id="p-9d1-55u-ze7">独立</p></td><td data-tag="td" id="td-ccv-vfl-y9t" class="td"><p id="p-zva-6ng-3hu">小时</p></td><td data-tag="td" id="td-6br-spc-ir4" class="td"><p id="p-9hq-poo-91l"><code data-tag="code" class="code">HOURS</code></p></td></tr><tr data-tag="tr" id="tr-lem-6sc-ona" class="tr"><td data-tag="td" id="td-dmd-nig-sx6" class="td"><p id="p-gy5-cus-1op"><code data-tag="code" class="code">DAY</code></p></td><td data-tag="td" id="td-s6t-g0h-hnn" class="td"><p id="p-buj-73d-fxa">独立</p></td><td data-tag="td" id="td-msr-63x-dm8" class="td"><p id="p-flq-ahv-tx7">天</p></td><td data-tag="td" id="td-yyi-g76-mcn" class="td"><p id="p-9hl-7nv-vo6"><code data-tag="code" class="code">DAYS</code></p></td></tr><tr data-tag="tr" id="tr-dq8-vfr-dz1" class="tr"><td data-tag="td" id="td-dhm-kzb-dyz" class="td"><p id="p-a4c-q15-n54"><code data-tag="code" class="code">WEEK</code></p></td><td data-tag="td" id="td-c19-exo-py2" class="td"><p id="p-lp9-1ph-ui5">独立</p></td><td data-tag="td" id="td-9ji-aw6-84f" class="td"><p id="p-m37-26y-3id">周</p></td><td data-tag="td" id="td-l37-l0f-yk3" class="td"><p id="p-9ie-caa-q4q"><code data-tag="code" class="code">WEEKS</code></p></td></tr><tr data-tag="tr" id="tr-6mf-cw8-pfw" class="tr"><td data-tag="td" id="td-fbi-zzu-9zb" class="td"><p id="p-apz-30t-w8o"><code data-tag="code" class="code">MONTH</code></p></td><td data-tag="td" id="td-fa4-tc2-1n6" class="td"><p id="p-77n-nqi-sa2">独立</p></td><td data-tag="td" id="td-yrn-2fa-mcm" class="td"><p id="p-1ay-azh-h1a">月</p></td><td data-tag="td" id="td-0lu-8w4-ztc" class="td"><p id="p-trw-x07-kdm"><code data-tag="code" class="code">MONTHS</code></p></td></tr><tr data-tag="tr" id="tr-dbu-d4o-5sa" class="tr"><td data-tag="td" id="td-cxf-3nh-mbs" class="td"><p id="p-uqs-fq4-ayn"><code data-tag="code" class="code">QUARTER</code></p></td><td data-tag="td" id="td-2rh-2cn-1e8" class="td"><p id="p-hwj-np6-78p">独立</p></td><td data-tag="td" id="td-tql-mg3-2el" class="td"><p id="p-fiu-0z0-c86">季度</p></td><td data-tag="td" id="td-5vd-ief-3fi" class="td"><p id="p-8ln-tye-i4q"><code data-tag="code" class="code">QUARTERS</code></p></td></tr><tr data-tag="tr" id="tr-1rs-xr5-z22" class="tr"><td data-tag="td" id="td-56h-m9u-01n" class="td"><p id="p-hjk-anp-vpv"><code data-tag="code" class="code">YEAR</code></p></td><td data-tag="td" id="td-y6c-vp3-9eb" class="td"><p id="p-307-p9g-lre">独立</p></td><td data-tag="td" id="td-hfq-m6i-pnq" class="td"><p id="p-kbd-ajh-pm0">年</p></td><td data-tag="td" id="td-9xf-0yp-spd" class="td"><p id="p-xmz-av3-zp0"><code data-tag="code" class="code">YEARS</code></p></td></tr><tr data-tag="tr" id="tr-621-wzs-42z" class="tr"><td data-tag="td" id="td-rly-q42-9c2" class="td"><p id="p-uzl-g5r-t38"><code data-tag="code" class="code">SECOND_MICROSECOND</code></p></td><td data-tag="td" id="td-3gz-t2w-3m3" class="td"><p id="p-9x1-fox-n2e">组合</p></td><td data-tag="td" id="td-3kf-23j-4fh" class="td"><p id="p-pkk-ji4-25m">秒到微秒</p></td><td data-tag="td" id="td-ame-r0b-8uz" class="td"><p id="p-pln-in9-dcw"><code data-tag="code" class="code">'SECONDS.MICROSECONDS'</code></p></td></tr><tr data-tag="tr" id="tr-jco-bfo-mgt" class="tr"><td data-tag="td" id="td-x9t-156-dgn" class="td"><p id="p-bgo-rv3-8ks"><code data-tag="code" class="code">MINUTE_MICROSECOND</code></p></td><td data-tag="td" id="td-2r6-vmy-ftp" class="td"><p id="p-32o-6uk-82l">组合</p></td><td data-tag="td" id="td-vk6-3m9-e9h" class="td"><p id="p-mvf-cg1-a4j">分钟到微秒</p></td><td data-tag="td" id="td-l9t-6g7-25s" class="td"><p id="p-ls2-eum-id3"><code data-tag="code" class="code">'MINUTES:SECONDS.MICROSECONDS'</code></p></td></tr><tr data-tag="tr" id="tr-fm0-q0e-tn8" class="tr"><td data-tag="td" id="td-gzr-9jn-zd2" class="td"><p id="p-6ox-eic-q1s"><code data-tag="code" class="code">MINUTE_SECOND</code></p></td><td data-tag="td" id="td-wg5-kj1-zr4" class="td"><p id="p-hqq-qag-2l9">组合</p></td><td data-tag="td" id="td-ukg-0p7-e3f" class="td"><p id="p-pqj-son-nc9">分钟到秒</p></td><td data-tag="td" id="td-aq2-2ud-7kh" class="td"><p id="p-y07-bg0-5gj"><code data-tag="code" class="code">'MINUTES:SECONDS'</code></p></td></tr><tr data-tag="tr" id="tr-1z9-1r5-zj6" class="tr"><td data-tag="td" id="td-ai5-tkj-qre" class="td"><p id="p-sg7-oy2-qhn"><code data-tag="code" class="code">HOUR_MICROSECOND</code></p></td><td data-tag="td" id="td-k2b-863-q0i" class="td"><p id="p-zll-hhh-plm">组合</p></td><td data-tag="td" id="td-gro-yto-rws" class="td"><p id="p-sov-0xl-024">小时到微秒</p></td><td data-tag="td" id="td-fzr-ckc-9ak" class="td"><p id="p-czq-drx-t8j"><code data-tag="code" class="code">'HOURS:MINUTES:SECONDS.MICROSECONDS'</code></p></td></tr><tr data-tag="tr" id="tr-muw-90q-a6a" class="tr"><td data-tag="td" id="td-55i-6y2-i4s" class="td"><p id="p-cqa-j5c-dtg"><code data-tag="code" class="code">HOUR_SECOND</code></p></td><td data-tag="td" id="td-dat-cro-j3s" class="td"><p id="p-cm3-hvv-r1a">组合</p></td><td data-tag="td" id="td-6kj-v5d-ua1" class="td"><p id="p-d16-8j9-s22">小时到秒</p></td><td data-tag="td" id="td-fym-gj5-4m2" class="td"><p id="p-4fv-pc9-l52"><code data-tag="code" class="code">'HOURS:MINUTES:SECONDS'</code></p></td></tr><tr data-tag="tr" id="tr-6fn-5wx-rez" class="tr"><td data-tag="td" id="td-mzx-232-mof" class="td"><p id="p-a7r-v7t-fh6"><code data-tag="code" class="code">HOUR_MINUTE</code></p></td><td data-tag="td" id="td-4fm-qyk-p7t" class="td"><p id="p-sxv-ymz-6mk">组合</p></td><td data-tag="td" id="td-nd4-d95-6qb" class="td"><p id="p-pfg-14h-z9o">小时到分钟</p></td><td data-tag="td" id="td-9xr-6qo-awn" class="td"><p id="p-23z-28t-2wt"><code data-tag="code" class="code">'HOURS:MINUTES'</code></p></td></tr><tr data-tag="tr" id="tr-8uu-2j6-54e" class="tr"><td data-tag="td" id="td-nuh-r04-2ju" class="td"><p id="p-8lm-vm0-hw0"><code data-tag="code" class="code">DAY_SECOND</code></p></td><td data-tag="td" id="td-3zl-71o-5jy" class="td"><p id="p-o96-k9d-rxn">组合</p></td><td data-tag="td" id="td-1kl-j7t-4mf" class="td"><p id="p-3ep-6ml-9f0">天到秒</p></td><td data-tag="td" id="td-aji-mdp-66m" class="td"><p id="p-4cz-4m6-7w1"><code data-tag="code" class="code">'DAYS HOURS:MINUTES:SECONDS'</code></p></td></tr><tr data-tag="tr" id="tr-cuz-j6k-cih" class="tr"><td data-tag="td" id="td-e03-vet-hy0" class="td"><p id="p-czy-x0e-g62"><code data-tag="code" class="code">DAY_MINUTE</code></p></td><td data-tag="td" id="td-m8m-bou-xli" class="td"><p id="p-7e4-lgw-brn">组合</p></td><td data-tag="td" id="td-y7v-blk-gcc" class="td"><p id="p-k7b-kcm-1cy">天到分钟</p></td><td data-tag="td" id="td-16a-p8h-nha" class="td"><p id="p-5av-d1i-h67"><code data-tag="code" class="code">'DDAYSD HOURS:MINUTES'</code></p></td></tr><tr data-tag="tr" id="tr-aqi-n5o-byn" class="tr"><td data-tag="td" id="td-jhs-rbg-ayn" class="td"><p id="p-kzz-stc-bt3"><code data-tag="code" class="code">DAY_HOUR</code></p></td><td data-tag="td" id="td-th1-tzv-dn5" class="td"><p id="p-jsq-r0m-p9g">组合</p></td><td data-tag="td" id="td-2rl-gk5-6jc" class="td"><p id="p-7hj-0z4-55x">天到小时</p></td><td data-tag="td" id="td-zij-m52-swy" class="td"><p id="p-gli-9ps-j1m"><code data-tag="code" class="code">'DAYS HOURS'</code></p></td></tr><tr data-tag="tr" id="tr-7u0-5gn-vtp" class="tr"><td data-tag="td" id="td-ln5-1qy-lf4" class="td"><p id="p-uu0-6yy-slg"><code data-tag="code" class="code">YEAR_MONTH</code></p></td><td data-tag="td" id="td-9n5-wg3-al3" class="td"><p id="p-7xb-8u4-7jr">组合</p></td><td data-tag="td" id="td-1p3-d9g-s1b" class="td"><p id="p-c3a-6zw-bwm">年到月</p></td><td data-tag="td" id="td-4dm-ba1-8b1" class="td"><p id="p-mv9-19l-kev"><code data-tag="code" class="code">'YEARS-MONTHS'</code></p></td></tr></tbody></table> **例子** ~~~ 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 **声明** ~~~ DATE_FORMAT(date, format) ~~~ **说明** 将日期时间以指定格式输出。 * `date`表示日期时间。 * `format`表示输出格式。 以下为所有输出格式列表: <table data-tag="table" id="table-9qi-eg9-itb" class="table"><colgroup span="1" width="240" data-tag="col" id="col-y7r-lza-rnc" colwidth="1*" colnum="1" colname="col1" style="width:33.33333333333333%" class="col"></colgroup><colgroup span="1" width="240" data-tag="col" id="col-r28-e9w-u9j" colwidth="1*" colnum="2" colname="col2" style="width:33.33333333333333%" class="col"></colgroup><colgroup span="1" width="240" data-tag="col" id="col-ltg-vfw-d3w" colwidth="1*" colnum="3" colname="col3" style="width:33.33333333333333%" class="col"></colgroup><thead id="thead-rrx-ci6-ymy" class="thead"><tr id="tr-ckh-s2t-yi0"><th id="td-g64-mkb-m5n"><p id="p-2lp-zif-sc0">格式符</p></th><th id="td-mvj-ojk-1zi"><p id="p-my3-ef8-hq0">含义</p></th><th id="td-4nq-seb-0ek"><p id="p-uc3-lpo-cj1">格式</p></th></tr></thead><tbody data-tag="tbody" id="tbody-y1l-723-ra5" class="tbody"><tr data-tag="tr" id="tr-9h9-hpc-f7d" class="tr"><td data-tag="td" id="td-shw-n5l-8u5" class="td"><p id="p-yux-wya-hoz"><code data-tag="code" class="code">%a</code></p></td><td data-tag="td" id="td-gc8-umf-uvm" class="td"><p id="p-141-88s-2dn">星期的英文缩写。</p></td><td data-tag="td" id="td-vfu-vcq-dva" class="td"><p id="p-91b-95p-2g2"><code data-tag="code" class="code">Sun..Sat</code></p></td></tr><tr data-tag="tr" id="tr-a0d-rtj-7i7" class="tr"><td data-tag="td" id="td-47i-dtl-ooz" class="td"><p id="p-ilu-6r1-5ar"><code data-tag="code" class="code">%b</code></p></td><td data-tag="td" id="td-3ma-tdl-ox6" class="td"><p id="p-v79-7p9-gbd">月份的英文缩写。</p></td><td data-tag="td" id="td-09b-9hw-u64" class="td"><p id="p-r48-agb-7ge"><code data-tag="code" class="code">Jan..Dec</code></p></td></tr><tr data-tag="tr" id="tr-1vm-uty-zb2" class="tr"><td data-tag="td" id="td-hc8-1kj-w0t" class="td"><p id="p-dum-dna-rop"><code data-tag="code" class="code">%c</code></p></td><td data-tag="td" id="td-49e-w7r-q1l" class="td"><p id="p-22p-7vx-0t0">月份的数字形式。</p></td><td data-tag="td" id="td-y05-nzv-wpt" class="td"><p id="p-d7t-y97-8ij"><code data-tag="code" class="code">1..12</code></p></td></tr><tr data-tag="tr" id="tr-fy1-unw-e9d" class="tr"><td data-tag="td" id="td-sbz-09f-l7m" class="td"><p id="p-yy3-6ww-385"><code data-tag="code" class="code">%D</code></p></td><td data-tag="td" id="td-sxi-c3m-deo" class="td"><p id="p-vdy-suk-ukd">日的英文缩写。</p></td><td data-tag="td" id="td-cbw-q4q-fzl" class="td"><p id="p-7bz-cwb-8le"><code data-tag="code" class="code">1st..31st</code></p></td></tr><tr data-tag="tr" id="tr-3bq-27k-ryi" class="tr"><td data-tag="td" id="td-0ll-50m-kuk" class="td"><p id="p-pzl-ml3-nvr"><code data-tag="code" class="code">%d</code></p></td><td data-tag="td" id="td-0hf-0h5-43z" class="td"><p id="p-1fb-p9f-r9t">日的数字形式。</p></td><td data-tag="td" id="td-219-iyt-gjs" class="td"><p id="p-jtv-fui-3ml"><code data-tag="code" class="code">01..31</code></p></td></tr><tr data-tag="tr" id="tr-tas-mgp-tvc" class="tr"><td data-tag="td" id="td-wge-ks6-5g5" class="td"><p id="p-5v5-wbb-sj3"><code data-tag="code" class="code">%e</code></p></td><td data-tag="td" id="td-f6z-q9i-v8f" class="td"><p id="p-pky-r2n-l1n">日的数字形式。</p></td><td data-tag="td" id="td-bzj-2mm-cf7" class="td"><p id="p-fmx-y3f-8o5"><code data-tag="code" class="code">1.. 31</code></p></td></tr><tr data-tag="tr" id="tr-5f4-o52-ak5" class="tr"><td data-tag="td" id="td-2fm-1wv-4mv" class="td"><p id="p-jzf-igw-ovh"><code data-tag="code" class="code">%f</code></p></td><td data-tag="td" id="td-97z-egh-0qr" class="td"><p id="p-ddz-k8i-cpx">微秒。</p></td><td data-tag="td" id="td-nsa-2x4-abb" class="td"><p id="p-hy3-4rh-knp"><code data-tag="code" class="code">000000..999999</code></p></td></tr><tr data-tag="tr" id="tr-qcr-val-yhr" class="tr"><td data-tag="td" id="td-6kk-jiz-xke" class="td"><p id="p-dlm-ybj-ki5"><code data-tag="code" class="code">%H</code></p></td><td data-tag="td" id="td-0ko-aql-tb6" class="td"><p id="p-oq9-iq5-vxe">小时。</p></td><td data-tag="td" id="td-bxt-h9b-nkf" class="td"><p id="p-vf2-a05-6e6"><code data-tag="code" class="code">00..23</code></p></td></tr><tr data-tag="tr" id="tr-fmy-3fh-m8f" class="tr"><td data-tag="td" id="td-dgb-had-hqu" class="td"><p id="p-m26-cyn-foe"><code data-tag="code" class="code">%h</code></p></td><td data-tag="td" id="td-b9n-czz-895" class="td"><p id="p-4c7-s6r-93p">小时。</p></td><td data-tag="td" id="td-5ir-8hj-1h3" class="td"><p id="p-9ua-t3z-gcb"><code data-tag="code" class="code">01..12</code></p></td></tr><tr data-tag="tr" id="tr-23t-gtu-a19" class="tr"><td data-tag="td" id="td-3m4-4i6-jnw" class="td"><p id="p-uif-prw-142"><code data-tag="code" class="code">%I</code></p></td><td data-tag="td" id="td-gb5-y8f-y74" class="td"><p id="p-nvi-m35-f9b">小时。</p></td><td data-tag="td" id="td-yod-v2n-vm6" class="td"><p id="p-vwp-13s-stc"><code data-tag="code" class="code">01..12</code></p></td></tr><tr data-tag="tr" id="tr-v66-1wj-lin" class="tr"><td data-tag="td" id="td-uu2-3lm-zno" class="td"><p id="p-dba-wa9-vdy"><code data-tag="code" class="code">%i</code></p></td><td data-tag="td" id="td-6x5-7i1-588" class="td"><p id="p-nmq-2kj-8lr">分钟。</p></td><td data-tag="td" id="td-zqs-003-6x8" class="td"><p id="p-d5d-mxg-iva"><code data-tag="code" class="code">00..59</code></p></td></tr><tr data-tag="tr" id="tr-4sx-5sr-i1c" class="tr"><td data-tag="td" id="td-bvx-7rm-bzm" class="td"><p id="p-wg5-9l9-96m"><code data-tag="code" class="code">%j</code></p></td><td data-tag="td" id="td-kn1-op7-oab" class="td"><p id="p-m89-aih-ss3">一年中的第几天。</p></td><td data-tag="td" id="td-17y-ikp-8qw" class="td"><p id="p-d6b-dm0-nq7"><code data-tag="code" class="code">001..366</code></p></td></tr><tr data-tag="tr" id="tr-ty8-fis-mhe" class="tr"><td data-tag="td" id="td-6dx-0jr-fve" class="td"><p id="p-252-ysb-fuy"><code data-tag="code" class="code">%k</code></p></td><td data-tag="td" id="td-q9u-67c-cb1" class="td"><p id="p-6bj-y49-30k">小时。</p></td><td data-tag="td" id="td-1zv-n5m-r28" class="td"><p id="p-07b-pif-4oh"><code data-tag="code" class="code">0..23</code></p></td></tr><tr data-tag="tr" id="tr-x0q-15i-ues" class="tr"><td data-tag="td" id="td-ea1-ccd-9qp" class="td"><p id="p-12v-mj5-786"><code data-tag="code" class="code">%l</code></p></td><td data-tag="td" id="td-3rv-ubx-5bo" class="td"><p id="p-x3t-7ur-n9z">小时。</p></td><td data-tag="td" id="td-ooe-c2p-feg" class="td"><p id="p-tb8-uny-f5k"><code data-tag="code" class="code">0..12</code></p></td></tr><tr data-tag="tr" id="tr-jsx-jhg-y80" class="tr"><td data-tag="td" id="td-fd9-v1f-xaq" class="td"><p id="p-bcg-oec-p56"><code data-tag="code" class="code">%M</code></p></td><td data-tag="td" id="td-6gd-n99-ild" class="td"><p id="p-jlb-fbb-seh">月份的英文名称。</p></td><td data-tag="td" id="td-c23-omh-79s" class="td"><p id="p-68y-y8z-cu1"><code data-tag="code" class="code">January..December</code></p></td></tr><tr data-tag="tr" id="tr-3nc-7kn-bon" class="tr"><td data-tag="td" id="td-le6-lu9-y5w" class="td"><p id="p-30e-39t-fe4"><code data-tag="code" class="code">%m</code></p></td><td data-tag="td" id="td-rq4-1jk-jck" class="td"><p id="p-7iq-e1t-kje">月份的数字形式。</p></td><td data-tag="td" id="td-nwm-owd-9at" class="td"><p id="p-th4-in1-4sb"><code data-tag="code" class="code">01..12</code></p></td></tr><tr data-tag="tr" id="tr-149-fdm-2d5" class="tr"><td data-tag="td" id="td-ncf-vkh-jnm" class="td"><p id="p-umi-fqf-r51"><code data-tag="code" class="code">%p</code></p></td><td data-tag="td" id="td-tmr-53g-f9z" class="td"><p id="p-gme-1fp-g6t">上午或下午。</p></td><td data-tag="td" id="td-o1j-1bs-bz9" class="td"><p id="p-wlc-4u8-1n3"><code data-tag="code" class="code">AM/PM</code></p></td></tr><tr data-tag="tr" id="tr-lql-98v-u9k" class="tr"><td data-tag="td" id="td-y0c-rxd-aj4" class="td"><p id="p-rwi-4r6-ivb"><code data-tag="code" class="code">%r</code></p></td><td data-tag="td" id="td-xo7-nrq-wiq" class="td"><p id="p-kza-492-7id">12小时制时间。</p></td><td data-tag="td" id="td-94k-r17-huc" class="td"><p id="p-su0-adn-76p"><code data-tag="code" class="code">hh:mm:ss AM/PM</code></p></td></tr><tr data-tag="tr" id="tr-8xv-yvl-qnu" class="tr"><td data-tag="td" id="td-0ps-lce-upz" class="td"><p id="p-8a5-t6i-ydt"><code data-tag="code" class="code">%S</code></p></td><td data-tag="td" id="td-nhr-hvu-8jl" class="td"><p id="p-avo-wnm-ju7">秒。</p></td><td data-tag="td" id="td-p1o-69z-cmr" class="td"><p id="p-mvz-0uf-1cp"><code data-tag="code" class="code">00..59</code></p></td></tr><tr data-tag="tr" id="tr-qhz-ofo-9g1" class="tr"><td data-tag="td" id="td-3o7-prl-38f" class="td"><p id="p-iyq-9ct-o5j"><code data-tag="code" class="code">%s</code></p></td><td data-tag="td" id="td-mvz-2fi-9cx" class="td"><p id="p-2gw-63a-sli">秒。</p></td><td data-tag="td" id="td-7t1-v2u-t8s" class="td"><p id="p-d5y-9go-doz"><code data-tag="code" class="code">00..59</code></p></td></tr><tr data-tag="tr" id="tr-1pz-2xn-3k1" class="tr"><td data-tag="td" id="td-zjk-1p2-vnr" class="td"><p id="p-3r7-x3k-l2f"><code data-tag="code" class="code">%T</code></p></td><td data-tag="td" id="td-wvx-oha-fs9" class="td"><p id="p-qfz-t9m-tmq">24小时制时间。</p></td><td data-tag="td" id="td-bnw-cww-f9s" class="td"><p id="p-vq1-880-snx"><code data-tag="code" class="code">hh:mm:ss</code></p></td></tr><tr data-tag="tr" id="tr-s7u-8fh-jca" class="tr"><td data-tag="td" id="td-qa8-k0w-cx9" class="td"><p id="p-iay-8aj-ya9"><code data-tag="code" class="code">%U</code></p></td><td data-tag="td" id="td-s4s-ntd-ky8" class="td"><p id="p-06a-43s-y60">一年中的第几周,周日为每周第一天。</p></td><td data-tag="td" id="td-jnq-9jb-zur" class="td"><p id="p-tyt-g74-y8r"><code data-tag="code" class="code">00..53</code></p></td></tr><tr data-tag="tr" id="tr-0yy-x1i-6i3" class="tr"><td data-tag="td" id="td-pjk-wwg-erg" class="td"><p id="p-mkr-lbl-qzl"><code data-tag="code" class="code">%u</code></p></td><td data-tag="td" id="td-6rb-9aj-qa8" class="td"><p id="p-2yv-box-7in">一年中的第几周,周一为每周第一天。</p></td><td data-tag="td" id="td-lj0-0a2-76c" class="td"><p id="p-59e-n1v-xzf"><code data-tag="code" class="code">00..53</code></p></td></tr><tr data-tag="tr" id="tr-egv-67n-8j6" class="tr"><td data-tag="td" id="td-v6c-yew-pfe" class="td"><p id="p-fij-yg6-84d"><code data-tag="code" class="code">%V</code></p></td><td data-tag="td" id="td-7ti-emq-cvn" class="td"><p id="p-igr-vq7-wvn">一年中的第几周,周日为每周第一天(和<code data-tag="code" class="code">%X</code>同时使用)。</p></td><td data-tag="td" id="td-abn-e1e-6v2" class="td"><p id="p-08s-unr-y79"><code data-tag="code" class="code">01..53</code></p></td></tr><tr data-tag="tr" id="tr-6ql-eyh-bzx" class="tr"><td data-tag="td" id="td-w4e-h1c-bdv" class="td"><p id="p-24r-ert-ly0"><code data-tag="code" class="code">%v</code></p></td><td data-tag="td" id="td-ngn-3wy-zsl" class="td"><p id="p-1up-al5-ppy">一年中的第几周,周一为每周第一天(和<code data-tag="code" class="code">%x</code>同时使用)。</p></td><td data-tag="td" id="td-zvp-yvp-8ey" class="td"><p id="p-nd9-hbk-9sd"><code data-tag="code" class="code">01..53</code></p></td></tr><tr data-tag="tr" id="tr-w5c-9lo-f9k" class="tr"><td data-tag="td" id="td-qup-8kh-wpp" class="td"><p id="p-bu9-fhy-qg5"><code data-tag="code" class="code">%W</code></p></td><td data-tag="td" id="td-ain-b8j-6fi" class="td"><p id="p-lof-ca8-eee">星期的英文名称。</p></td><td data-tag="td" id="td-n68-tl1-7va" class="td"><p id="p-oli-jp9-if7"><code data-tag="code" class="code">Sunday..Saturday</code></p></td></tr><tr data-tag="tr" id="tr-h7i-1ck-o85" class="tr"><td data-tag="td" id="td-pg8-bx4-wcl" class="td"><p id="p-6lm-tpm-uiz"><code data-tag="code" class="code">%w</code></p></td><td data-tag="td" id="td-oim-u1d-7td" class="td"><p id="p-ylc-iv5-cuq">一周中的第几天。</p></td><td data-tag="td" id="td-jlr-7vi-cuy" class="td"><p id="p-b1w-lhv-7pv"><code data-tag="code" class="code">0=Sunday..6=Saturday</code></p></td></tr><tr data-tag="tr" id="tr-3gg-2uc-sm3" class="tr"><td data-tag="td" id="td-ah4-xwk-07y" class="td"><p id="p-y1l-yg8-a3p"><code data-tag="code" class="code">%X</code></p></td><td data-tag="td" id="td-stg-xq5-68b" class="td"><p id="p-0ok-n5p-hjj">一周所属的年份,周日为每周第一天(和<code data-tag="code" class="code">%V</code>同时使用)。</p></td><td data-tag="td" id="td-nlf-npn-dum" class="td"><p id="p-kw5-eua-qy5"></p></td></tr><tr data-tag="tr" id="tr-9rf-jij-pnl" class="tr"><td data-tag="td" id="td-906-yde-c69" class="td"><p id="p-ykq-jo2-pqb"><code data-tag="code" class="code">%x</code></p></td><td data-tag="td" id="td-5yl-r1n-q6q" class="td"><p id="p-kwn-iaq-w1z">一周所属的年份,周一为每周第一天(和<code data-tag="code" class="code">%v</code>同时使用)。</p></td><td data-tag="td" id="td-s1i-dvs-0od" class="td"><p id="p-cg5-84u-hnq"></p></td></tr><tr data-tag="tr" id="tr-23i-tta-5nv" class="tr"><td data-tag="td" id="td-g12-2dr-cin" class="td"><p id="p-5hc-yqj-euz"><code data-tag="code" class="code">%Y</code></p></td><td data-tag="td" id="td-zrj-sf3-3je" class="td"><p id="p-qb0-p9s-tks">四位年份。</p></td><td data-tag="td" id="td-def-cc5-okw" class="td"><p id="p-kom-hcm-rhv"></p></td></tr><tr data-tag="tr" id="tr-8ll-5mq-fs4" class="tr"><td data-tag="td" id="td-kz2-bki-98y" class="td"><p id="p-x29-5ud-4ia"><code data-tag="code" class="code">%y</code></p></td><td data-tag="td" id="td-g6k-8ve-g45" class="td"><p id="p-b44-6q4-c84">两位年份。</p></td><td data-tag="td" id="td-xxg-lo6-dus" class="td"><p id="p-nqu-waa-4wl"></p></td></tr><tr data-tag="tr" id="tr-t4h-kx0-fpu" class="tr"><td data-tag="td" id="td-bcz-mcv-hmk" class="td"><p id="p-zfk-4uj-wk5"><code data-tag="code" class="code">%%</code></p></td><td data-tag="td" id="td-hqg-gsv-83z" class="td"><p id="p-pb6-6hg-ys3">文字字符,输出一个<code data-tag="code" class="code">%</code>。</p></td><td data-tag="td" id="td-2qj-8qa-rfn" class="td"><p data-tag="p" id="p-nhp-tbj-9zt" class="p"></p></td></tr></tbody></table> **例子** ~~~ 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 **声明** ~~~ DATE_SUB(date, INTERVAL expr unit) ~~~ **说明** 日期时间的算术计算。 请参考`DATE_ADD()`。 #### DATEDIFF **声明** ~~~ DATEDIFF(date1, date2) ~~~ **说明** 返回`date1`和`date2`之间的天数。 计算中只用到参数的日期部分,忽略时间部分。 **例子** ~~~ 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 **声明** ~~~ EXTRACT(unit FROM date) ~~~ **说明** 以整数类型返回`date`的指定部分值。如果指定多个部分,则将所有值按顺序拼接。 `unit`请参考`DATE_ADD()`。当`unit`为`WEEK`时,请参考`DATE_FORMAT()`的`%U`说明。 **例子** ~~~ 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 **声明** ~~~ FROM_DAYS(N) ~~~ **说明** 返回指定天数`N`对应的`DATE`值。天数指距离`0000-01-01`的天数。 **例子** ~~~ 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 **声明** ~~~ 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()`**说****明**中列出。 **例子** ~~~ 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 **声明** ~~~ MONTH(date) ~~~ **说明** 返回`date`的月份信息。 **例子** ~~~ obclient> SELECT MONTH('2008-02-03'); +---------------------+ | MONTH('2008-02-03') | +---------------------+ | 2 | +---------------------+ 1 row in set (0.01 sec) ~~~ #### NOW **声明** ~~~ NOW([scale]) ~~~ **说明** 同`CURRENT_TIMESTAMP()`。 #### PERIOD\_DIFF **声明** ~~~ PERIOD_DIFF(p1, p2) ~~~ **说明** 以月份位单位返回两个日期之间的间隔。日期只能包含年月信息,格式只能为`YYYYMM`或`YYMM`。 **例子** ~~~ obclient> SELECT PERIOD_DIFF(200802, 200703); +----------------------------+ | PERIOD_DIFF(200802,200703) | +----------------------------+ | 11 | +----------------------------+ 1 row in set (0.01 sec) ~~~ #### STR\_TO\_DATE **声明** ~~~ STR_TO_DATE(str, format) ~~~ **说明** 使用`format`将`str`转换为`DATETIME`值、`DATE`值、或`TIME`值。返回值类型取决于`format`包含日期时间的哪些部分。 `format`支持的格式已在`DATE_FORMAT()`**说****明**中列出。 **例子** ~~~ 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 **声明** ~~~ TIME(datetime ~~~ **说明** 以`TIME`类型返回`datetime`的时间信息。 **例子** ~~~ 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 **声明** ~~~ TIME_TO_USEC(date) ~~~ **说明** 将`date`值转换为距离`1970-01-01 00:00:00.000000`的微秒数,考虑时区信息。 `date`可以表示日期,也可以表示日期时间。 **例子** ~~~ 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 **声明** ~~~ TIMEDIFF(date1, date2) ~~~ **说明** 以`TIME`类型返回两个日期时间的时间间隔。 **例子** ~~~ 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 **声明** ~~~ TIMESTAMPDIFF(unit, date1, date2) ~~~ **说明** 以`unit`为单位返回两个日期时间的间隔。`unit`只能为`DATE_ADD()`中的独立单位。 **例子** ~~~ 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 **声明** ~~~ TIMESTAMPADD(unit, interval_expr, date) ~~~ **说明** 日期时间的算术计算。 同`DATE_ADD()`,但`unit`只能为独立单位。 **例子** ~~~ 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 **声明** ~~~ TO_DAYS(date) ~~~ **说明** 返回指定`date`值对应的天数。天数指距离`0000-01-01`的天数。 **例子** ~~~ 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 **声明** ~~~ USEC_TO_TIME(usec) ~~~ **说明** 将`usec`值转换为`TIMESTAMP`类型值。 `usec`表示距离`1970-01-01 00:00:00.000000`的微秒数,考虑时区信息。 **例子** ~~~ 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 **声明** ~~~ UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) ~~~ **说明** * 不指定`date`参数时,返回当前时间距离 '1970-01-01 00:00:00' 的秒数,考虑时区。 * 指定`date`参数时,返回指定时间距离 '1970-01-01 00:00:00' 的秒数,考虑时区。 **例子** ~~~ 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 **声明** ~~~ UTC_TIMESTAMP() ~~~ **说明** 返回当前 UTC 时间。 **例子** ~~~ obclient> SELECT UTC_TIMESTAMP(); +---------------------+ | UTC_TIMESTAMP() | +---------------------+ | 2018-05-06 01:38:32 | +---------------------+ 1 row in set (0.01 sec) ~~~ #### YEAR **声明** ~~~ YEAR(date) ~~~ **说明** 返回`date`值的年份信息。 **例子** ~~~ obclient> SELECT YEAR('1987-01-01'); +--------------------+ | YEAR('1987-01-01') | +--------------------+ | 1987 | +--------------------+ 1 row in set (0.00 sec) ~~~ ## 字符串函数 #### CONCAT **声明** ~~~ CONCAT(str1, .., strN) ~~~ **说明** 把多个字符串连接成一个字符串。参数中包含`NULL`时,返回`NULL`。 **例子** ~~~ 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 **声明** ~~~ CONCAT_WS(separator, str1, .., strN) ~~~ **说明** 把多个字符串连接成一个字符串,相邻字符串间使用`separator`分隔。参数中包含`NULL`时,将忽略`NULL`。 **例子** ~~~ 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 **声明** ~~~ FORMAT(X,D) ~~~ **说明** 把数字 X 格式化为“#,###,###.##”格式,四舍五入到 D 位小数,并以字符串形式返回结果(如果整数部分超过三位,会用“,”作为千分位分隔符)。如果 D 为 0,则结果没有小数点或小数部分。 **例子** ~~~ 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 **声明** ~~~ 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`指定的起始位置非法时,返回空字符串。 **例子** ~~~ 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 **声明** ~~~ SUBSTRING(str, pos) SUBSTRING(str, pos, len) SUBSTRING(str FROM pos) SUBSTRING(str FROM pos FOR len) ~~~ **说明** 同`SUBSTR`。 #### TRIM **声明** ~~~ TRIM([[{BOTH | LEADING | TRAILING}] [remstr] FROM] str) ~~~ **说明** 删除字符串所有前缀和/或后缀,默认为`BOTH`。参数中包含`NULL`时,返回`NULL`。 **例子** ~~~ 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 **声明** ~~~ LTRIM(str) ~~~ **说明** 删除字符串左侧的空格。 #### RTRIM **声明** ~~~ RTRIM(str) ~~~ **说明** 删除字符串右侧的空格。 #### ASCII **声明** ~~~ ASCII(str) ~~~ **说明** 返回字符串最左侧字符的 ASCII 码。 #### ORD **声明** ~~~ ORD(str) ~~~ **说明** 返回字符串最左侧字符的字符码。单字节编码如果最左侧字符是多字节编码字符,返回值计算规则如下: ~~~ (1st byte code) + (2nd byte code * 256) + (3rd byte code * 256^2) ... ~~~ **例子** ~~~ obclient> SELECT ORD('中国'); +---------------+ | ORD('中国') | +---------------+ | 14989485 | +---------------+ 1 row in set (0.01 sec) ~~~ #### LENGTH **声明** ~~~ LENGTH(str) ~~~ **说明** 返回`str`的字节长度。 **例子** ~~~ obclient> SELECT LENGTH('中国'), LENGTH('hello'); +------------------+-----------------+ | LENGTH('中国') | LENGTH('hello') | +------------------+-----------------+ | 6 | 5 | +------------------+-----------------+ 1 row in set (0.01 sec) ~~~ #### CHAR\_LENGTH **声明** ~~~ CHAR_LENGTH(str) ~~~ **说明** 返回字符串包含的字符数。 **例子** ~~~ obclient> SELECT CHAR_LENGTH('中国'), CHAR_LENGTH('hello'); +-----------------------+----------------------+ | CHAR_LENGTH('中国') | CHAR_LENGTH('hello') | +-----------------------+----------------------+ | 2 | 5 | +-----------------------+----------------------+ 1 row in set (0.00 sec) ~~~ #### UPPER **声明** ~~~ UPPER(str) ~~~ **说明** 将字符串中的小写字母转化为大写字母。 **例子** ~~~ obclient> SELECT UPPER('obclient您好!'); +-----------------------------+ | UPPER('obclient您好!') | +-----------------------------+ | OCEANBASE您好! | +-----------------------------+ 1 row in set (0.01 sec) ~~~ #### LOWER **声明** ~~~ LOWER(str) ~~~ **说明** 将字符串中的大写字母转化为小写字母。 **例子** ~~~ obclient> SELECT LOWER('obclient您好!'); +-----------------------------+ | LOWER('obclient您好!') | +-----------------------------+ | obclient您好! | +-----------------------------+ 1 row in set (0.01 sec) ~~~ #### HEX **声明** ~~~ HEX(str) ~~~ **说明** 将数字或字符串转化为十六进制字符串。 **例子** ~~~ obclient> SELECT HEX(255), HEX('abc'); +----------+------------+ | HEX(255) | HEX('abc') | +----------+------------+ | FF | 616263 | +----------+------------+ 1 row in set (0.00 sec) ~~~ #### UNHEX **声明** ~~~ UNHEX(str) ~~~ **说明** 将十六进制字符串转化为正常字符串。 **例子** ~~~ obclient> SELECT UNHEX('4f6365616e42617365'); +-----------------------------+ | UNHEX('4f6365616e42617365') | +-----------------------------+ | obclient | +-----------------------------+ 1 row in set (0.00 sec) ~~~ #### MD5 **声明** ~~~ MD5(str) ~~~ **说明** 返回字符串的 MD5 值。 **例子** ~~~ obclient> SELECT MD5(1); +----------------------------------+ | MD5(1) | +----------------------------------+ | c4ca4238a0b923820dcc509a6f75849b | +----------------------------------+ 1 row in set (0.00 sec) ~~~ #### INT2IP **声明** ~~~ INT2IP(int_value) ~~~ **说明** 将整数内码转换成 IP 地址。 **例子** ~~~ 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 **声明** ~~~ IP2INT('ip_addr') ~~~ **说明** 将 IP 地址转换成整数内码。 **例子** ~~~ 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 **声明** ~~~ str1 [NOT] LIKE str2 [ESCAPE str3] ~~~ **说明** 字符串通配符匹配。参数中包含`NULL`时,返回`NULL`。 通配符包括: * `%`:匹配任意长度字符串。 * `_`:匹配单个字符。 ESCAPE 用于定义转义符,如果 str2 中包含 str3,在匹配时 str3 后的字符将做为普通字符处理。 **例子** ~~~ obclient> SELECT 'ab%' LIKE 'abc%' ESCAPE 'c'; +------------------------------+ | 'ab%' LIKE 'abc%' ESCAPE 'c' | +------------------------------+ | 1 | +------------------------------+ 1 row in set (0.01 sec) ~~~ #### REGEXP **声明** ~~~ str [NOT] REGEXP | RLIKE pat ~~~ **说明** 正则匹配。参数中包含`NULL`时,返回`NULL`。 **例子** ~~~ 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 **声明** ~~~ REPEAT(str, count) ~~~ **说明** 返回`str`重复`count`次组成的字符串。`count`小于等于 0 时,返回空字符串。参数中包含`NULL`时,返回`NULL`。 **例子** ~~~ 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 **声明** ~~~ SPACE(N) ~~~ **说明** 返回包含`N`个空格的字符串。 #### SUBSTRING\_INDEX **声明** ~~~ SUBSTRING_INDEX(str, delim, count) ~~~ **说明** 在定界符 delim 以及 count 出现前,从字符串 str 返回字符串。若 count 为正值,则返回最终定界符(从左边开始)左边的一切内容。若 count 为负值,则返回定界符(从右边开始)右边的一切内容。任意一个参数为 NULL,返回 NULL;若 str 或 delim 为空字符串,则返回空串;若 count = 0, 返回空串。 *str, delim, count 参数支持数值与字符串的隐式转换。* **例子** ~~~ 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。 **例子** ~~~ 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() 的双参数形式相同,除非参数的顺序被颠倒。 **例子** ~~~ obclient>SELECT INSTR('foobarbar', 'bar'); -> 4 obclient>SELECT INSTR('xbar', 'foobar'); -> 0 ~~~ #### REPLACE **声明** `REPLACE(str, from_str, to_str)` **说明** 返回字符串 str 以及所有被字符 to\_str 替代的字符串 from\_str。 **例子** ~~~ 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() 的补数。 **例子** ~~~ 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() 的补数。 **例子** ~~~ 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 的组合串。 **例子** ~~~ 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 被截断。 **例子** ~~~ 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 被截断。 **例子** ~~~ 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。 **例子** ~~~ obclient> select uuid(); +--------------------------------------+ | uuid() | +--------------------------------------+ | f756a1f6-4de6-11e8-90af-90b11c53e421 | +--------------------------------------+ 1 row in set (0.00 sec) ~~~ #### BIN **声明** `bin(N)` **说明** 返回数字 N 的二进制形式。 **例子** ~~~ obclient > SELECT BIN(12); +---------+ | BIN(12) | +---------+ | 1100 | +---------+ 1 row in set (0.00 sec) ~~~ #### QUOTE **声明** `quote(str)` **说明** 引用一个字符串以产生一个结果可以作为 SQL 语句中正确地转义数据值。返回的字符串由单引号和单引号的各个实例封闭(''),反斜线(''),ASCII NUL 和 Control-Z 前面加一个反斜杠。如果参数为 NULL,则返回值是词 'NULL' 不包围单引号。 **例子** ~~~ 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 的子串。 **例子** ~~~ 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:表示目标系统所提供的数据类型。可以是以下值其中的一个: * DATE * DATETIME * DECIMAL * SIGNED \[INTEGER\] * TIME * UNSIGNED \[INTEGER\] 在使用 CAST 函数进行数据类型转换时,在下列情况下能够被接受: * 两个表达式的数据类型完全相同; * 两个表达式可隐式转换; * 必须显式转换数据类型。 如果试图进行不可能的转换,OceanBase数据库 将显示一条错误信息。 如果转换时没有指定数据类型的长度,则使用 OceanBase 数据库系统内部最大长度。如 varchar 是262,143字节,number 是 65 个 bit 位的浮动精度。 支持带符号和无符号的 64 比特值的运算。若你正在使用数字操作符 (如 +) 而其中一个操作数为无符号整数,则结果为无符号。可使用 SIGNED 和 UNSIGNED cast 操作符来覆盖它。将运算分别派给带符号或无符号 64 比特整数。 假如任意一个操作数为一个浮点值,则结果为一个浮点值。 **例子** ~~~ 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() 遵循银行家规则“四舍--大于五入--五取最接近的偶数”的规则: 一个带有任何小数部分的值会被舍入成最接近的偶数整数。 **例子** ~~~ 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。 **例子** ~~~ 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。 **例子** ~~~ 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。 **例子** ~~~ 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),再对结果求补。 **例子** ~~~ 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。 支持浮点数、十六进制数。 **例子** ~~~ 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\]。 **例子** ~~~ 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。 **例子** ~~~ 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。 **例子** ~~~ 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。 **例子** ~~~ 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。 当参数中同时存在数值和字符时,把字符隐式转换为数值类型处理,不能转换的报错。 **例子** ~~~ 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。 当参数中同时存在数值和字符时,把字符隐式转换为数值类型处理,不能转换的报错。 **例子** ~~~ 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 比较操作符具有一些相同的特性。 **例子** ~~~ 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 **声明** ~~~ 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。 **例子** ~~~ 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(即:expr1NULL),返回结果为 expr2; 否则返回结果为 expr3。 IF() 返回结果可以是数值或字符串类型,它取决于使用的内容。 如果 expr2, expr3 中只有一个明确是 NULL,则 IF() 函数的结果类型为非 NULL 表达式的结果类型。 **例子** ~~~ 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() 的默认返回值类型按照以下方式计算: <table data-tag="table" id="table-tn4-2t9-vxa" class="table"><colgroup span="1" width="360" data-tag="col" id="col-0mp-e6m-5yw" colwidth="1*" colnum="1" colname="col1" style="width:50%" class="col"></colgroup><colgroup span="1" width="360" data-tag="col" id="col-3gl-yqx-e5z" colwidth="1*" colnum="2" colname="col2" style="width:50%" class="col"></colgroup><thead id="thead-chx-3d7-y7f" class="thead"><tr id="tr-f3v-4c5-hjn"><th id="td-qiy-5or-jcg"><p id="p-wua-4wp-9f0">表达式</p></th><th id="td-zan-hna-z9c"><p id="p-66s-1gi-xef">返回值</p></th></tr></thead><tbody data-tag="tbody" id="tbody-246-6dj-nny" class="tbody"><tr data-tag="tr" id="tr-4pg-e09-f2a" class="tr"><td data-tag="td" id="td-8i9-a0l-q46" class="td"><p id="p-i97-lbr-jid">expr1 或 expr2 返回值为一个字符串。</p></td><td data-tag="td" id="td-0a3-jfc-shg" class="td"><p id="p-oui-npj-5vl">字符串</p></td></tr><tr data-tag="tr" id="tr-3la-lya-nbh" class="tr"><td data-tag="td" id="td-9sf-grq-xcc" class="td"><p id="p-1hs-11v-9kk">expr1 或 expr2 返回值为一个浮点值。</p></td><td data-tag="td" id="td-s1y-c9x-k0k" class="td"><p id="p-i6u-bf2-s7j">浮点</p></td></tr><tr data-tag="tr" id="tr-env-jj1-le7" class="tr"><td data-tag="td" id="td-spx-7e3-zeo" class="td"><p id="p-12d-tdc-mhk">expr1 或 expr2 返回值为一个整数。</p></td><td data-tag="td" id="td-nfd-6n6-2dg" class="td"><p id="p-l6h-shs-zkj">整数</p></td></tr></tbody></table> 假如 expr1 和 expr2 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。 **例子** ~~~ 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。* **例子** ~~~ 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() 函数功能。 该函数的含义如下: ~~~ IF 条件=值1 THEN RETURN(返回值1) ELSIF 条件=值2 THEN RETURN(返回值2) ...... ELSIF 条件=值n THEN RETURN(返回值n) ELSE RETURN(缺省值) END IF ~~~