MySQL 函数手册


知博网 zhiblog.com MySQL 专题 MMMMysql ysql ysql ysql 函数手册 日期 函数 : 日期 函数 : 日期 函数 : 日期 函数 : 一、 MySQL 获得当前日期时间 函数 1.1 获得当前日期 +时间( date + time)函数: now() mysql> select now(); +---------------------+ | now() | +---------------------+ | 2008-08-08 22:20:46 | +---------------------+ 除了 now() 函数能获得当前的日期时间外, MySQL 中还有下面的函数: current_timestamp() ,current_timestamp ,localtime() ,localtime ,localtimestamp --(v4.0.6) ,localtimestamp() --(v4.0.6) 这些日期时间函数,都等同于now()。鉴于now() 函数简短易记,建议总是使 用now() 来替代上面列出的函数。 1.2 获得当前日期 +时间( date + time)函数: sysdate() sysdate() 日期时间函数跟now() 类似,不同之处在于:now() 在执行开始时值 就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了: mysql> select now(), sleep(3), now(); +---------------------+----------+---------------------+ | now() | sleep(3) | now() | +---------------------+----------+---------------------+ | 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 | +---------------------+----------+---------------------+ mysql> select sysdate(), sleep(3), sysdate(); 知博网 zhiblog.com MySQL 专题 +---------------------+----------+---------------------+ | sysdate() | sleep(3) | sysdate() | +---------------------+----------+---------------------+ | 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 | +---------------------+----------+---------------------+ 可以看到 ,虽然中途 sleep 3 秒,但now() 函数两次的时间值是相同的 ;sysdate() 函数两次得到的时间值相差 3 秒。MySQL Manual 中是这样描述 sysdate() 的: Return the time at which the function executes。 sysdate() 日期时间函数,一般情况下很少用到。 2. 获得当前日期( date)函数: curdate() mysql> select curdate(); +------------+ | curdate() | +------------+ | 2008-08-08 | +------------+ 其中,下面的两个日期函数等同于 curdate(): current_date() ,current_date 3. 获得当前时间( time)函数: curtime() mysql> select curtime(); +-----------+ | curtime() | +-----------+ | 22:41:30 | +-----------+ 其中,下面的两个时间函数等同于 curtime(): current_time() ,current_time 4. 获得当前 UTC 日期时间函数: utc_date(), utc_time(), utc_timestamp() 知博网 zhiblog.com MySQL 专题 mysql> select utc_timestamp(), utc_date(), utc_time(), now() +---------------------+------------+------------+---------------------+ | utc_timestamp() | utc_date() | utc_time() | now() | +---------------------+------------+------------+---------------------+ | 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 | +---------------------+------------+------------+---------------------+ 因为我国位于东八时区 ,所以本地时间 = UTC 时间 + 8 小时 。UTC 时间在业 务涉及多个国家和地区的时候,非常有用。 二、 MySQL 日期时间 Extract(选取) 函数。 1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、 秒、微秒 set @dt = '2008-09-10 07:15:30.123456'; select date(@dt); -- 2008-09-10 select time(@dt); -- 07:15:30.123456 select year(@dt); -- 2008 select quarter(@dt); -- 3 select month(@dt); -- 9 select week(@dt); -- 36 select day(@dt); -- 10 select hour(@dt); -- 7 select minute(@dt); -- 15 select second(@dt); -- 30 select microsecond(@dt); -- 123456 2. MySQL Extract() 函数,可以上面实现类似的功能: set @dt = '2008-09-10 07:15:30.123456'; select extract(year from @dt); -- 2008 select extract(quarter from @dt); -- 3 select extract(month from @dt); -- 9 select extract(week from @dt); -- 36 select extract(day from @dt); -- 10 select extract(hour from @dt); -- 7 select extract(minute from @dt); -- 15 select extract(second from @dt); -- 30 select extract(microsecond from @dt); -- 123456 select extract(year_month from @dt); -- 200809 select extract(day_hour from @dt); -- 1007 知博网 zhiblog.com MySQL 专题 select extract(day_minute from @dt); -- 100715 select extract(day_second from @dt); -- 10071530 select extract(day_microsecond from @dt); -- 10071530123456 select extract(hour_minute from @dt); -- 715 select extract(hour_second from @dt); -- 71530 select extract(hour_microsecond from @dt); -- 71530123456 select extract(minute_second from @dt); -- 1530 select extract(minute_microsecond from @dt); -- 1530123456 select extract(second_microsecond from @dt); -- 30123456 MySQL Extract() 函数除了没有date(),time() 的功能外,其他功能一应具全。并 且还具有选取‘day_microsecond’等功能。注意这里不是只选取day 和 microsecond,而是从日期的 day 部分一直选取到 microsecond 部分 。够强悍的 吧! MySQL Extract() 函数唯一不好的地方在于:你需要多敲几次键盘。 3. MySQL dayof... 函数: dayofweek(), dayofmonth(), dayofyear() 分别返回日期参数,在一周、一月、一年中的位置。 set @dt = '2008-08-08'; select dayofweek(@dt); -- 6 select dayofmonth(@dt); -- 8 select dayofyear(@dt); -- 221 日期'2008-08-08' 是一周中的第6 天(1 = Sunday, 2 = Monday, ..., 7 = Saturday);一月中的第 8 天;一年中的第 221 天。 4. MySQL week... 函数 :week(), weekofyear(), dayofweek(), weekday(), yearweek() set @dt = '2008-08-08'; select week(@dt); -- 31 select week(@dt,3); -- 32 select weekofyear(@dt); -- 32 select dayofweek(@dt); -- 6 select weekday(@dt); -- 4 select yearweek(@dt); -- 200831 MySQL week() 函数 ,可以有两个参数 ,具体可看手册 。weekofyear() 和week() 知博网 zhiblog.com MySQL 专题 一样,都是计算“某天”是位于一年中的第几周。weekofyear(@dt) 等价于 week(@dt,3)。 MySQL weekday() 函数和dayofweek() 类似,都是返回“某天”在一周中的位 置。不同点在于参考的标准 ,weekday:(0 = Monday, 1 = Tuesday, ..., 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday, ..., 7 = Saturday) MySQL yearweek() 函数,返回 year(2008) + week 位置 (31)。 5. MySQL 返回星期和月份名称函数: dayname(), monthname() set @dt = '2008-08-08'; select dayname(@dt); -- Friday select monthname(@dt); -- August 思考,如何返回中文的名称呢? 6. MySQL last_day() 函数:返回月份中的最后一天。 select last_day('2008-02-01'); -- 2008-02-29 select last_day('2008-08-08'); -- 2008-08-31 MySQL last_day() 函数非常有用 ,比如我想得到当前月份中有多少天 ,可以这样 来计算: mysql> select now(), day(last_day(now())) as days; +---------------------+------+ | now() | days | +----------------- ----+------+ | 2008-08-09 11:45:45 | 31 | +---------------------+------+ 三、 MySQL 日期时间计算函数 1. MySQL 为日期增加一个时间间隔: date_add() set @dt = now(); select date_add(@dt, interval 1 day); -- add 1 day select date_add(@dt, interval 1 hour); -- add 1 hour select date_add(@dt, interval 1 minute); --... select date_add(@dt, interval 1 second); 知博网 zhiblog.com MySQL 专题 select date_add(@dt, interval 1 microsecond); select date_add(@dt, interval 1 week); select date_add(@dt, interval 1 month); select date_add(@dt, interval 1 quarter); select date_add(@dt, interval 1 year); select date_add(@dt, interval -1 day); -- sub 1 day MySQL adddate(), addtime()函数 ,可以用 date_add() 来替代 。下面是 date_add() 实现 addtime() 功能示例: mysql> set @dt = '2008-08-09 12:12:33'; mysql> mysql> select date_add(@dt, interval '01:15:30' hour_second); +------------------------------------------------+ | date_add(@dt, interval '01:15:30' hour_second) | +------------------------------------------------+ | 2008-08-09 13:28:03 | +------------------------------------------------+ mysql> select date_add(@dt, interval '1 01:15:30' day_second); +-------------------------------------------------+ | date_add(@dt, interval '1 01:15:30' day_second) | +-------------------------------------------------+ | 2008-08-10 13:28:03 | +-------------------------------------------------+ date_add() 函数 ,分别为 @dt 增加了 “1小时 15 分30 秒”和“1天1小时 15 分30 秒”。建议:总是使用date_add() 日期时间函数来替代adddate(), addtime()。 2. MySQL 为日期减去一个时间间隔: date_sub() mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second); +----------------------------------------------------------------+ | date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) | +----------------------------------------------------------------+ | 1997-12-30 22:58:59 | +----------------------------------------------------------------+ MySQL date_sub() 日期时间函数和date_add() 用法一致,不再赘述。另外, MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。 知博网 zhiblog.com MySQL 专题 3. MySQL 另类日期函数: period_add(P,N), period_diff(P1,P2) 函数参数 “P”的格式为 “YYYYMM”或者 “YYMM”,第二个参数 “N”表 示增加或减去 N month(月 )。 MySQL period_add(P,N):日期加 /减去 N月。 mysql> select period_add(200808,2), period_add(20080808,-2) +----------------------+-------------------------+ | period_add(200808,2) | period_add(20080808,-2) | +----------------------+-------------------------+ | 200810 | 20080806 | +----------------------+-------------------------+ MySQL period_diff(P1,P2):日期 P1-P2,返回 N 个月。 mysql> select period_diff(200808, 200801); +-----------------------------+ | period_diff(200808, 200801) | +-----------------------------+ | 7 | +-----------------------------+ 在MySQL 中,这两个日期函数,一般情况下很少用到。 4. MySQL 日期、时间相减函数: datediff(date1,date2), timediff(time1,time2) MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。 select datediff('2008-08-08', '2008-08-01'); -- 7 select datediff('2008-08-01', '2008-08-08'); ---7 MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。 select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08 select timediff('08:08:08', '00:00:00'); -- 08:08:08 注意: timediff(time1,time2) 函数的两个参数类型必须相同。 四、 MySQL 日期转换函数、时间转换函数 1. MySQL (时间、秒)转换函数: time_to_sec(time), sec_to_time(seconds) 知博网 zhiblog.com MySQL 专题 select time_to_sec('01:00:05'); -- 3605 select sec_to_time(3605); --'01:00:05' 2. MySQL (日期、天数)转换函数: to_days(date), from_days(days) select to_days('0000-00-00'); -- 0 select to_days('2008-08-08'); -- 733627 select from_days(0); --'0000-00-00' select from_days(733627); --'2008-08-08' 3. MySQL Str to Date (字符串转换为日期)函数: str_to_date(str, format) select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09 select str_to_date('08/09/08' ,'%m/%d/%y'); -- 2008-08-09 select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09 select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30 select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30 可 以看 到, str_to_date(str,format) 转 换函 数, 可以 把一 些杂 乱无 章的 字符 串转 换 为日期格式。另外,它也可以转换为时间 。“format”可以参看 MySQL 手册 。 4. MySQL Date/Time to Str (日期/时间转换为字符串)函数: date_format(date,format), time_format(time,format) mysql> select date_format('2008-08-08 22:23:00', '%W%M%Y'); +------------------------------------------------+ | date_format('2008-08-08 22:23:00', '%W%M%Y') | +------------------------------------------------+ | Friday August 2008 | +------------------------------------------------+ mysql> select date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s'); +----------------------------------------------------+ | date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') | +----------------------------------------------------+ | 20080808222301 | +----------------------------------------------------+ mysql> select time_format('22:23:01', '%H.%i.%s'); +-------------------------------------+ | time_format('22:23:01', '%H.%i.%s') | 知博网 zhiblog.com MySQL 专题 +-------------------------------------+ | 22.23.01 | +-------------------------------------+ MySQL 日 期 、时 间 转 换 函 数 : date_format(date,format), time_format(time,format) 能够把一个日期 /时间转换成各种各样的字符串格式 。它是 str_to_date(str,format) 函数的 一个逆转换。 5. MySQL 获得国家地区时间格式函数: get_format() MySQL get_format() 语法: get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal' MySQL get_format() 用法的全部示例: select get_format(date,'usa') ;--'%m.%d.%Y' select get_format(date,'jis') ;--'%Y-%m-%d' select get_format(date,'iso') ;--'%Y-%m-%d' select get_format(date,'eur') ;--'%d.%m.%Y' select get_format(date,'internal') ;--'%Y%m%d' select get_format(datetime,'usa') ;--'%Y-%m-%d %H.%i.%s' select get_format(datetime,'jis') ;--'%Y-%m-%d %H:%i:%s' select get_format(datetime,'iso') ;--'%Y-%m-%d %H:%i:%s' select get_format(datetime,'eur') ;--'%Y-%m-%d %H.%i.%s' select get_format(datetime,'internal') ;--'%Y%m%d%H%i%s' select get_format(time,'usa') ;--'%h:%i:%s %p' select get_format(time,'jis') ;--'%H:%i:%s' select get_format(time,'iso') ;--'%H:%i:%s' select get_format(time,'eur') ;--'%H.%i.%s' select get_format(time,'internal') ;--'%H%i%s' MySQL get_format() 函数在实际中用到机会的比较少。 6. MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second) select makedate(2001,31); --'2001-01-31' select makedate(2001,32); --'2001-02-01' select maketime(12,15,30); --'12:15:30' 五、 MySQL 时间戳( Timestamp)函数 1. MySQL 获得当前时间戳函数: current_timestamp, current_timestamp() 知博网 zhiblog.com MySQL 专题 mysql> select current_timestamp, current_timestamp(); +---------------------+---------------------+ | current_timestamp | current_timestamp() | +---------------------+---------------------+ | 2008-08-09 23:22:24 | 2008-08-09 23:22:24 | +---------------------+---------------------+ 2. MySQL (Unix 时间戳、日期)转换函数: unix_timestamp(), unix_timestamp(date), from_unixtime(unix_timestamp), from_unixtime(unix_timestamp,format) 下面是示例: select unix_timestamp(); -- 1218290027 select unix_timestamp('2008-08-08'); -- 1218124800 select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800 select from_unixtime(1218290027); --'2008-08-09 21:53:47' select from_unixtime(1218124800); --'2008-08-08 00:00:00' select from_unixtime(1218169800); --'2008-08-08 12:30:00' select from_unixtime(1218169800, '%Y%D%M%h:%i:%s %x'); --'2008 8th August 12:30:00 2008' 3. MySQL 时间戳( timestamp)转换、增、减函数: timestamp(date) -- date to timestamp timestamp(dt,time) -- dt + time timestampadd(unit,interval,datetime_expr) -- timestampdiff(unit,datetime_expr1,datetime_expr2) -- 请看示例部分: select timestamp('2008-08-08'); -- 2008-08-08 00:00:00 select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01 select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01 select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00 select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00 MySQL timestampadd() 函数类似于 date_add()。 知博网 zhiblog.com MySQL 专题 select timestampdiff(year,'2002-05-01','2001-01-01'); ---1 select timestampdiff(day ,'2002-05-01','2001-01-01'); ---485 select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); ---12 select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7 MySQL timestampdiff() 函数就比datediff() 功能强多了,datediff() 只能计算两 个日期( date)之间相差的天数。 六、 MySQL 时区( timezone)转换函数 convert_tz(dt,from_tz,to_tz) select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00 时区转换也可以通过 date_add, date_sub, timestampadd 来实现。 select date_add('2008-08-08 12:00:00', interval -8 hour); -- 2008-08-08 04:00:00 select date_sub('2008-08-08 12:00:00', interval 8 hour); -- 2008-08-08 04:00:00 select timestampadd(hour, -8, '2008-08-08 12:00:00'); -- 2008-08-08 04:00:00 字符 串处 理函 数 字符 串处 理函 数 字符 串处 理函 数 字符 串处 理函 数 符串或串 (String)是由零个或多个字符组成的有限序列。一般记为 s='a1a2•••an'(n>=0)。它是编程语言中表示文本的数据类型。 通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在 串的某个位置上插入一个子串以及删除一个子串等 。两个字符串相等的充要条件是 : 长度相等 ,并且各个对应位置上的字符都相等 。设p、q是两个串 ,求q在p中首次 出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链 接存储方式。 下面我们来看看 MySQL 中的字符串函数 假如结果的长度大于 max_allowed_packet 系统变量的最大值时 ,字符串值函数 的返回值为 NULL。 对于在字符串位置操作的函数,第一个位置的编号为 1。 ◆ASCII(str) 知博网 zhiblog.com MySQL 专题 返回值为字符串 str 的最左字符的数值 。假如 str 为空字符串 ,则返回值为 0 。 假如 str 为NULL,则返回值为 NULL。ASCII()用于带有从 0到255 的数值的字 符。 mysql>SELECTASCII('2'); ->50 mysql>SELECTASCII(2); ->50 mysql>SELECTASCII('dx'); ->100 见ORD()函数。 ◆BIN(N) 返回值为 N的二进制值的字符串表示,其中 N 为一个 longlong (BIGINT) 数 字。这等同于 CONV(N,10,2)。假如 N 为NULL,则返回值为 NULL。 mysql>SELECTBIN(12); ->'1100' ◆BIT_LENGTH(str) 返回值为二进制的字符串 str 长度。 mysql>SELECTBIT_LENGTH('text'); ->32 ◆CHAR(N,... [USING charset]) 知博网 zhiblog.com MySQL 专题 CHAR()将每个参数 N理解为一个整数,其返回值为一个包含这些整数的代码 值所给出的字符的字符串。 NULL 值被省略。 mysql>SELECTCHAR(77,121,83,81,'76'); ->'MySQL' mysql>SELECTCHAR(77,77.3,'77.3'); ->'MMM' 大于 255 的CHAR()参数被转换为多结果字符。 例如, CHAR(256) 相当于 CHAR(1,0), 而CHAR(256*256) 则相当于 CHAR(1,0,0): mysql>SELECTHEX(CHAR(1,0)),HEX(CHAR(256)); +----------------+----------------+ |HEX(CHAR(1,0))|HEX(CHAR(256))| +----------------+----------------+ |0100|0100| +----------------+----------------+ mysql>SELECTHEX(CHAR(1,0,0)), HEX(CHAR(256*256)); +------------------+--------------------+ |HEX(CHAR(1,0,0))|HEX(CHAR(256*256))| +------------------+--------------------+ |010000|010000| +------------------+--------------------+ CHAR()的返回值为一个二进制字符串。可选择使用 USING 语句产生一个给出 的字符集中的字符串: mysql>SELECTCHARSET(CHAR(0x65)),CHARSET(CHAR(0x65USING utf8)); mysql>SELECTCHARSET(CHAR(0x65)),CHARSET(CHAR(0x65USING utf8)); +---------------------+--------------------------------+ |CHARSET(CHAR(0x65))|CHARSET(CHAR(0x65USINGutf8))| +---------------------+--------------------------------+ |binary|utf8| +---------------------+--------------------------------+ 如果 USING 已经产生,而结果字符串不符合给出的字符集,则会发出警告。 同样,如果严格的 SQL 模式被激活,则 CHAR()的结果会成为 NULL。 ◆CHAR_LENGTH(str) 知博网 zhiblog.com MySQL 专题 返回值为字符串 str 的长度,长度的单位为字符。一个多字节字符算作一个单 字符。对于一个包含五个二字节字符集 ,LENGTH()返回值为 10, 而 CHAR_LENGTH()的返回值为 5。 ◆CHARACTER_LENGTH(str) CHARACTER_LENGTH()是CHAR_LENGTH()的同义词。 ◆COMPRESS(string_to_compress) 压缩一个字符串。这个函数要求 MySQL 已经用一个诸如 zlib 的压缩库压缩 过。 否则,返回值始终是 NULL。UNCOMPRESS() 可将压缩过的字符串进行解 压缩。 mysql>SELECTLENGTH(COMPRESS(REPEAT('a',1000))); ->21 mysql>SELECTLENGTH(COMPRESS('')); ->0 mysql>SELECTLENGTH(COMPRESS('a')); ->13 mysql>SELECTLENGTH(COMPRESS(REPEAT('a',16))); ->15 压缩后的字符串的内容按照以下方式存储: 空字符串按照空字符串存储。 非空字符串未压缩字符串的四字节长度进行存储 (首先为低字节 ),后面是压缩字 符串。如果字符串以空格结尾,就会在后加一个 "."号,以防止当结果值是存储 在 CHAR 或VARCHAR 类型的字段列时 ,出现自动把结尾空格去掉的现象。 (不推荐使 用CHAR 或VARCHAR 来存储压缩字符串。最好使用一个 BLOB 列代替)。 ◆CONCAT(str1,str2,...) 返回结果为连接参数产生的字符串 。如有任何一个参数为 NULL,则返回值为 NULL。或许有一个或多个参数 。如果所有参数均为非二进制字符串 ,则结果为非 二进制字符串 。如果自变量中含有任一二进制字符串 ,则结果为一个二进制字符串 。 一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用 显式类型 cast, 例如: SELECT CONCAT(CAST(int_col ASCHAR), char_col) mysql>SELECTCONCAT('My','S','QL'); 知博网 zhiblog.com MySQL 专题 ->'MySQL' mysql>SELECTCONCAT('My',NULL,'QL'); ->NULL mysql>SELECTCONCAT(14.3); ->'14.3' ◆CONCAT_WS(separator,str1,str2,...) CONCAT_WS() 代表 CONCAT With Separator ,是 CONCAT()的特殊形 式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之 间。分隔符可以是一个字符串 ,也可以是其它参数 。如果分隔符为 NULL,则结果 为NULL。函数会忽略任何分隔符参数后的 NULL 值。 mysql>SELECTCONCAT_WS(',','Firstname','Second name','LastName'); ->'Firstname,Secondname,LastName' mysql>SELECTCONCAT_WS(',','First name',NULL,'LastName'); ->'Firstname,LastName' CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。 ◆CONV(N,from_base,to_base) 不同数基间转换数字。返回值为数字的 N字符串表示,由 from_base 基转化为 to_base 基。如有任意一个参数为 NULL,则返回值为 NULL。自变量 N 被理解为 一个整数 ,但是可以被指定为一个整数或字符串 。最小基数为 2 ,而最大基数则为 36。If to_base 是一个负数 ,则N 被看作一个带符号数 。否则 ,N 被看作无符号 数。 CONV() 的运行精确度为 64 比特。 mysql>SELECTCONV('a',16,2); ->'1010' mysql>SELECTCONV('6E',18,8); ->'172' mysql>SELECTCONV(-17,10,-18); ->'-H' mysql>SELECTCONV(10+'10'+'10'+0xa,10,10); ->'40' ◆ELT(N,str1,str2,str3,...) 知博网 zhiblog.com MySQL 专题 若N = 1,则返回值为 str1 ,若N = 2,则返回值为 str2 ,以此类推 。若N 小 于1或大于参数的数目,则返回值为 NULL。ELT() 是FIELD()的补数。 mysql>SELECTELT(1,'ej','Heja','hej','foo'); ->'ej' mysql>SELECTELT(4,'ej','Heja','hej','foo'); ->'foo' ◆EXPORT_SET(bits,on,off[,separator[,number_of_bits]]) 返回值为一个字符串,其中对于 bits 值中的每个位组,可以得到一个 on 字符 串,而对于每个清零比特位,可以得到一个 off 字符串。 bits 中的比特值按照从右 到左的顺序接受检验 (由低位比特到高位比特 )。字符串被分隔字符串分开 (默认为逗 号‘,’),按照从左到右的顺序被添加到结果中。 number_of_bits 会给出被检验的二进 制位数 (默认为 64)。 mysql>SELECTEXPORT_SET(5,'Y','N',',',4); ->'Y,N,Y,N' mysql>SELECTEXPORT_SET(6,'1','0',',',10); ->'0,1,1,0,0,0,0,0,0,0' ◆FIELD(str,str1,str2,str3,...) 返回值为 str1, str2, str3,……列表中的 str 指数 。在找不到 str 的情况下 ,返回值 为0 。 如果所有对于 FIELD() 的参数均为字符串,则所有参数均按照字符串进行比 较。如果所有的参数均为数字,则按照数字进行比较。否则,参数按照双倍进行比 较。 如果 str 为NULL,则返回值为 0 ,原因是 NULL 不能同任何值进行同等比较 。 FIELD() 是ELT()的补数。 mysql>SELECTFIELD('ej','Hej','ej','Heja', 'hej','foo'); ->2 mysql>SELECTFIELD('fo','Hej','ej','Heja', 'hej','foo'); ->0 知博网 zhiblog.com MySQL 专题 ◆FIND_IN_SET(str,strlist) 假如字符 串str 在由N 子链组成的字符串列 表strlist 中,则返回值的范围在 1 到N 之间 。一个字符串列表就是一个由一些被 ‘,’符号分开的自链组成的字符串 。 如果第一个参数是一个常数字符串,而第二个是 type SET 列,则 FIND_IN_SET() 函数被优化 ,使用比特计算 。如果 str 不在 strlist 或strlist 为空字符串 ,则返回值为 0 。如任意一个参数为 NULL,则返回值为 NULL。这个函数在第一个参数包含一 个逗号 (‘,’)时将无法正常运行。 mysql>SELECTFIND_IN_SET('b','a,b,c,d'); ->2 ◆FORMAT(X,D) 将number X设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后 D 位, 而返回结果为一个字符串。 ◆HEX(N_or_S) 如果 N_OR_S 是一个数字,则返回一个 十六进制值 N 的字符串表示,在这 里, N 是一个 longlong (BIGINT)数。这相当于 CONV(N,10,16)。 如果 N_OR_S 是一个字符串,则返回值为一个 N_OR_S 的十六进制字符串表 示, 其中每个 N_OR_S 里的每个字符被转化为两个十六进制数字。 mysql>SELECTHEX(255); ->'FF' mysql>SELECT0x616263; ->'abc' mysql>SELECTHEX('abc'); ->616263 ◆INSERT(str,pos,len,newstr) 返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr 取代 的 len 字符。 如果 pos 超过字符串长度,则返回值为原始字符串。 假如 len 的长度 大于其它字符串的长度,则从位置 pos 开始替换。若任何一个参数为 null,则返回 值为 NULL。 mysql>SELECTINSERT('Quadratic',3,4,'What'); 知博网 zhiblog.com MySQL 专题 ->'QuWhattic' mysql>SELECTINSERT('Quadratic',-1,4,'What'); ->'Quadratic' mysql>SELECTINSERT('Quadratic',3,100,'What'); ->'QuWhat' 这个函数支持多字节字元。 ◆INSTR(str,substr) 返回字符串 str 中子字符串的第一个出现位置。这和 LOCATE()的双参数形式 相同,除非参数的顺序被颠倒。 mysql>SELECTINSTR('foobarbar','bar'); ->4 mysql>SELECTINSTR('xbar','foobar'); ->0 这个函数支持多字节字元,并且只有当至少有一个参数是二进制字符串时区分 大小写。 ◆LCASE(str) LCASE() 是LOWER()的同义词。 ◆LEFT(str,len) 返回从字符串 str 开始的 len 最左字符。 mysql>SELECTLEFT('foobarbar',5); ->'fooba' ◆LENGTH(str) 返回值为字符串 str 的长度,单位为字节。一个多字节字符算作多字节。这意 味着 对于一个包含 5个2字节字符的字符串, LENGTH() 的返回值为 10, 而 CHAR_LENGTH()的返回值则为 5。 mysql>SELECTLENGTH('text'); ->4 知博网 zhiblog.com MySQL 专题 ◆LOAD_FILE(file_name) 读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上 , 你必须为文件制定路径全名,而且你还必须拥有 FILE 特许权。文件必须可读取, 文件容量必须小于 max_allowed_packet 字节。 若文件不存在 ,或因不满足上述条件而不能被读取 ,则函数返回值为 NULL。 mysql>UPDATEtbl_name SETblob_column=LOAD_FILE('/tmp/picture') WHEREid=1; ◆LOCATE(substr,str) , LOCATE(substr,str,pos) 第一个语法返回字符串 str 中子字符串 substr 的第一个出现位置。第二个语法 返回字符串 str中子字符 串substr的第一个出现位置 , 起始位置 在pos。如若substr 不 在str 中,则返回值为 0。 mysql>SELECTLOCATE('bar','foobarbar'); ->4 mysql>SELECTLOCATE('xbar','foobar'); ->0 mysql>SELECTLOCATE('bar','foobarbar',5); ->7 这个函数支持多字节字元,并且只有当至少有一个参数是二进制字符串时区分 大小写。 ◆LOWER(str) 返回字符串 str 以及所有根据最新的字符集映射表变为小写字母的字符 (默认 为cp1252 Latin1)。 mysql>SELECTLOWER('QUADRATICALLY'); ->'quadratically' 这个函数支持多字节字元。 ◆LPAD(str,len,padstr) 知博网 zhiblog.com MySQL 专题 返回字符串 str, 其左边由字符串 padstr 填补到 len 字符长度 。假如 str 的长度 大于 len, 则返回值被缩短至 len 字符。 mysql>SELECTLPAD('hi',4,'??'); ->'??hi' mysql>SELECTLPAD('hi',1,'??'); ->'h' ◆LTRIM(str) 返回字符串 str ,其引导空格字符被删除。 mysql>SELECTLTRIM('barbar'); ->'barbar' 这个函数支持多字节字元。 ◆MAKE_SET(bits,str1,str2,...) 返回一个设定值 (一个包含被 ‘,’号分开的字字符串的字符串 ),由在 bits 组中 具有相应的比特的字符串组成。 str1 对应比特 0, str2 对应比特 1,以此类推。 str1, str2, ...中的 NULL 值不会被添加到结果中。 mysql>SELECTMAKE_SET(1,'a','b','c'); ->'a' mysql>SELECTMAKE_SET(1| 4,'hello','nice','world'); ->'hello,world' mysql>SELECTMAKE_SET(1| 4,'hello','nice',NULL,'world'); ->'hello' mysql>SELECTMAKE_SET(0,'a','b','c'); ->'' ◆MID(str,pos,len) MID(str,pos,len) 是SUBSTRING(str,pos,len)的同义词。 ◆OCT(N) 返回一个 N的八进制值的字符串表示,其中 N 是一个 longlong (BIGINT)数。 这等同于 CONV(N,10,8)。若 N 为NULL,则返回值为 NULL。 知博网 zhiblog.com MySQL 专题 mysql>SELECTOCT(12); ->'14' ◆OCTET_LENGTH(str) OCTET_LENGTH() 是LENGTH()的同义词。 ◆ORD(str) 若字符串 str 的最左字符是一个多字节字符 ,则返回该字符的代码 ,代码的计 算通过使用以下公式计算其组成字节的数值而得出 : (1stbytecode) +(2ndbytecode×256) +(3rdbytecode×2562)... 假如最左字符不是一个多字节字符 ,那么 ORD()和函数 ASCII()返回相同的值 。 mysql>SELECTORD('2'); ->50 ◆POSITION(substr IN str) POSITION(substr IN str)是LOCATE(substr,str)同义词。 ◆QUOTE(str) 引证一个字符串,由此产生一个在 SQL 语句中可用作完全转义数据值的结 果。 返回的字符串由单引号标注,每例都带有单引号 (‘'’)、反斜线符号 (‘\’)、 ASCII NUL 以及前面有反斜线符号的 Control-Z 。如果自变量的值为 NULL, 则返回 不带单引号的单词 “NULL”。 mysql>SELECTQUOTE('Don\'t!'); ->'Don\'t!' mysql>SELECTQUOTE(NULL); ->NULL ◆REPEAT(str,count) 返回一个由重复的字符串 str 组成的字符串,字符串 str 的数目等于 count 。若 count <= 0,则返回一个空字符串。若 str 或count 为NULL,则返回 NULL。 知博网 zhiblog.com MySQL 专题 mysql>SELECTREPEAT('MySQL',3); ->'MySQLMySQLMySQL' ◆REPLACE(str,from_str,to_str) 返回字符串 str 以及所有被字符串 to_str 替代的字符串 from_str 。 mysql>SELECTREPLACE('www.mysql.com','w','Ww'); ->'WwWwWw.mysql.com' 这个函数支持多字节字元。 ◆REVERSE(str) 返回字符串 str ,顺序和字符顺序相反。 mysql>SELECTREVERSE('abc'); ->'cba' 这个函数支持多字节字元。 ◆RIGHT(str,len) 从字符串 str 开始,返回最右 len 字符。 mysql>SELECTRIGHT('foobarbar',4); ->'rbar' 这个函数支持多字节字元。 ◆RPAD(str,len,padstr) 返回字符 串str, 其右边被字符串 padstr 填补 至len 字符长度 。假如字符 串str 的 长度大于 len,则返回值被缩短到与 len 字符相同长度。 mysql>SELECTRPAD('hi',5,'?'); ->'hi???' mysql>SELECTRPAD('hi',1,'?'); ->'h' 这个函数支持多字节字元。 知博网 zhiblog.com MySQL 专题 ◆RTRIM(str) 返回字符串 str ,结尾空格字符被删去。 mysql>SELECTRTRIM('barbar'); ->'barbar' 这个函数支持多字节字元。 ◆SOUNDEX(str) 从str 返回一个 soundex 字符串。 两个具有几乎同样探测的字符串应该具有同 样的 soundex 字符串。一个标准的 soundex 字符串的长度为 4个字符,然 而 SOUNDEX() 函数会返回一个人以长度的字符串。 可使用结果中的 SUBSTRING() 来得到一个标准 soundex 字符串。在 str 中,会忽略所有未按照字母顺序排列的字 符。 所有不在 A-Z 范围之内的国际字母符号被视为元音字母。 mysql>SELECTSOUNDEX('Hello'); ->'H400' mysql>SELECTSOUNDEX('Quadratically'); ->'Q36324' 注意 :这个函数执行原始 的Soundex 算法 ,而非更加流行的加强版本 (如D. Knuth 所述 )。其区别在于原始版本首先会删去元音 ,其次是重复 ,而加强版则首先删去重 复,而后删去元音。 ◆expr1 SOUNDSLIKE expr2 这相当于 SOUNDEX(expr1) = SOUNDEX(expr2)。 ◆SPACE(N) 返回一个由 N 间隔符号组成的字符串。 mysql>SELECTSPACE(6); ->'' ◆SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len) 知博网 zhiblog.com MySQL 专题 不带有 len 参数的格式从字符串 str 返回一个子字符串 ,起始于位置 pos。带有 len 参数的格式从字符串 str 返回一个长度同 len 字符相同的子字符串,起始于位置 pos。使用 FROM 的格式为标准 SQL 语法 。也可能对 pos 使用一个负值 。假若这 样,则子字符串的位置起始于字符串结尾的 pos 字符,而不是字符串的开头位置 。 在以下格式的函数中可以对 pos 使用一个负值。 mysql>SELECTSUBSTRING('Quadratically',5); ->'ratically' mysql>SELECTSUBSTRING('foobarbar'FROM4); ->'barbar' mysql>SELECTSUBSTRING('Quadratically',5,6); ->'ratica' mysql>SELECTSUBSTRING('Sakila',-3); ->'ila' mysql>SELECTSUBSTRING('Sakila',-5,3); ->'aki' mysql>SELECTSUBSTRING('Sakila'FROM-4FOR2); ->'ki' 这个函数支持多字节字元。 注意,如果对 len 使用的是一个小于 1的值,则结果始终为空字符串。 SUBSTR()是SUBSTRING()的同义词。 ◆SUBSTRING_INDEX(str,delim,count) 在定界符 delim 以及 count 出现前 ,从字符串 str 返回自字符串 。若count 为正 值,则返回最终定界符 (从左边开始 )左边的一切内容。若 count 为负值,则返回定界 符(从右边开始)右边的一切内容。 mysql>SELECTSUBSTRING_INDEX('www.mysql.com', '.',2); ->'www.mysql' mysql>SELECTSUBSTRING_INDEX('www.mysql.com', '.',-2); ->'mysql.com' 这个函数支持多字节字元。 知博网 zhiblog.com MySQL 专题 ◆TRIM([{BOTH | LEADING | TRAILING}[remstr] FROM] str) TRIM(remstr FROM] str) 返回字符串 str ,其中所有 remstr 前缀和 /或后缀都已被删除。若分类 符 BOTH、LEADIN 或TRAILING 中没有一个是给定的 ,则假设为 BOTH。remstr 为 可选项,在未指定情况下,可删除空格。 mysql> SELECTTRIM(' bar '); -> 'bar' mysql> SELECTTRIM(LEADING'x' FROM'xxxbarxxx'); -> 'barxxx' mysql> SELECTTRIM(BOTH'x' FROM'xxxbarxxx'); -> 'bar' mysql> SELECTTRIM(TRAILING'xyz' FROM'barxxyz'); -> 'barx' 这个函数支持多字节字元。 ◆UCASE(str) UCASE()是UPPER()的同义词。 ◆UNCOMPRESS(string_to_uncompress) 对经 COMPRESS()函数压缩后的字符串进行解压缩 。若参数为压缩值 ,则结果 为NULL。这个函数要求 MySQL 已被诸如 zlib 之类的压缩库编译过。否则 , 返 回值将始终是 NULL。 mysql> SELECT UNCOMPRESS(COMPRESS('any string')); -> 'any string' mysql> SELECT UNCOMPRESS('any string'); -> NULL ◆UNCOMPRESSED_LENGTH(compressed_string) 返回压缩字符串压缩前的长度。 mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30))); -> 30 知博网 zhiblog.com MySQL 专题 ◆UNHEX(str) 执行从 HEX(str)的反向操作。就是说,它将参数中的每一对十六进制数字理解 为一个数字,并将其转化为该数字代表的字符。结果字符以二进制字符串的形式返 回。 mysql>SELECTUNHEX('4D7953514C'); ->'MySQL' mysql>SELECT0x4D7953514C; ->'MySQL' mysql>SELECTUNHEX(HEX('string')); ->'string' mysql>SELECTHEX(UNHEX('1267')); ->'1267' ◆UPPER(str) 返回字符串 str,以及根据最新字符集映射转化为大写字母的字符 (默认 为 cp1252 Latin1). mysql>SELECTUPPER('Hej'); ->'HEJ' 该函数支持多字节字元。 数学 函数 数学 函数 数学 函数 数学 函数 所有的数学函数在一个出错的情况下返回 NULL。 - 单目减。改变参数的符号。 mysql> select - 2; 注意 ,如果这个操作符与一个 BIGINT 使用 ,返回值是一个 BIGINT!这意味着你 应该避免在整数上使用 -,那可能有值 -2^63! ABS(X) 返回 X的绝对值。 mysql> select ABS(2); 知博网 zhiblog.com MySQL 专题 -> 2 mysql> select ABS(-32); -> 32 该功能可安全用于 BIGINT 值。 SIGN(X) 返回参数的符号,为 -1、0或1,取决于 X是否是负数、零或正数。 mysql> select SIGN(-32); -> -1 mysql> select SIGN(0); -> 0 mysql> select SIGN(234); -> 1 MOD(N,M) % 模(类似 C中的 %操作符 )。返回 N被M除的余数。 mysql> select MOD(234, 10); -> 4 mysql> select 253 % 7; -> 1 mysql> select MOD(29,9); -> 2 这个函数可安全用于 BIGINT 值。 FLOOR(X) 返回不大于 X的最大整数值。 mysql> select FLOOR(1.23); -> 1 mysql> select FLOOR(-1.23); -> -2 知博网 zhiblog.com MySQL 专题 注意返回值被变换为一个 BIGINT! CEILING(X) 返回不小于 X的最小整数值。 mysql> select CEILING(1.23); -> 2 mysql> select CEILING(-1.23); -> -1 注意返回值被变换为一个 BIGINT! ROUND(X) 返回参数 X的四舍五入的一个整数。 mysql> select ROUND(-1.23); -> -1 mysql> select ROUND(-1.58); -> -2 mysql> select ROUND(1.58); -> 2 注意返回值被变换为一个 BIGINT! ROUND(X,D) 返回参数 X的四舍五入的有 D为小数的一个数字。如果 D为0,结果将没有小数 点或小数部分。 mysql> select ROUND(1.298, 1); -> 1.3 mysql> select ROUND(1.298, 0); -> 1 注意返回值被变换为一个 BIGINT! EXP(X) 返回值 e(自然对数的底)的 X次方。 mysql> select EXP(2); -> 7.389056 知博网 zhiblog.com MySQL 专题 mysql> select EXP(-2); -> 0.135335 LOG(X) 返回 X的自然对数。 mysql> select LOG(2); -> 0.693147 mysql> select LOG(-2); -> NULL 如果你想要一个数字 X的任意底 B的对数,使用公式 LOG(X)/LOG(B)。 LOG10(X) 返回 X的以 10 为底的对数。 mysql> select LOG10(2); -> 0.301030 mysql> select LOG10(100); -> 2.000000 mysql> select LOG10(-100); -> NULL POW(X,Y) POWER(X,Y) 返回值 X的Y次幂。 mysql> select POW(2,2); -> 4.000000 mysql> select POW(2,-2); -> 0.250000 SQRT(X) 返回非负数 X的平方根。 mysql> select SQRT(4); -> 2.000000 知博网 zhiblog.com MySQL 专题 mysql> select SQRT(20); -> 4.472136 PI() 返回 PI的值(圆周率)。 mysql> select PI(); -> 3.141593 COS(X) 返回 X的余弦 , 在这里 X以弧度给出。 mysql> select COS(PI()); -> -1.000000 SIN(X) 返回 X的正弦值,在此 X以弧度给出。 mysql> select SIN(PI()); -> 0.000000 TAN(X) 返回 X的正切值,在此 X以弧度给出。 mysql> select TAN(PI()+1); -> 1.557408 ACOS(X) 返回 X反余弦,即其余弦值是 X。如果 X不在 -1到1的范围,返回 NULL。 mysql> select ACOS(1); -> 0.000000 mysql> select ACOS(1.0001); -> NULL mysql> select ACOS(0); -> 1.570796 ASIN(X) 返回 X反正弦值,即其正弦值是 X。L如果 X不在 -1到1的范围,返回 NULL。 知博网 zhiblog.com MySQL 专题 mysql> select ASIN(0.2); -> 0.201358 mysql> select ASIN('foo'); -> 0.000000 ATAN(X) 返回 X的反正切值,即其正切值是 X。 mysql> select ATAN(2); -> 1.107149 mysql> select ATAN(-2); -> -1.107149 ATAN2(X,Y) 返回 2个变量 X和Y的反正切 。它类似于计算 Y/X 的反正切 ,除了两个参数的符 号被用来决定结果的象限。 mysql> select ATAN(-2,2); -> -0.785398 mysql> select ATAN(PI(),0); -> 1.570796 COT(X) 返回 X的余切。 mysql> select COT(12); -> -1.57267341 mysql> select COT(0); -> NULL RAND() RAND(N) 返回在范围 0到1.0 内的随机浮点值。如果一个整数参数 N被指定,它被用作种 子值。 mysql> select RAND(); 知博网 zhiblog.com MySQL 专题 -> 0.5925 mysql> select RAND(20); -> 0.1811 mysql> select RAND(20); -> 0.1811 mysql> select RAND(); -> 0.2079 mysql> select RAND(); -> 0.7888 你不能在一个 ORDERBY子句用 RAND()值使用列,因为 ORDERBY将重复计 算列多次。然而在 MySQL3.23 中,你可以做: Select *FROM table_name orDER BYRAND(),这是有利于得到一个来自 Select *FROM table1,table2 Where a=b AND c LEAST(X,Y,...) 有2和2个以上的参数 ,返回最小 (最小值 )的参数 。参数使用下列规则进行比较 : 如果返回值被使用在一个 INTEGER 上下文 ,或所有的参数都是整数值 ,他们作为 整数比较。 如果返回值被使用在一个 REAL 上下文 ,或所有的参数是实数值 ,他们作为实数比 较。 如果任何参数是一个大小敏感的字符串,参数作为大小写敏感的字符串被比较。 在其他的情况下,参数作为大小写无关的字符串被比较。 mysql> select LEAST(2,0); -> 0 mysql> select LEAST(34.0,3.0,5.0,767.0); -> 3.0 mysql> select LEAST("B","A","C"); -> "A" 知博网 zhiblog.com MySQL 专题 在MySQL 3.22.5 以前的版本,你可以使用 MIN()而不是 LEAST。 GREATEST(X,Y,...) 返回最大 (最大值 )的参数。参数使用与 LEAST 一样的规则进行比较。 mysql> select GREATEST(2,0); -> 2 mysql> select GREATEST(34.0,3.0,5.0,767.0); -> 767.0 mysql> select GREATEST("B","A","C"); -> "C" 在MySQL 在3.22.5 以前的版本 , 你能使用 MAX()而不是 GREATEST. DEGREES(X) 返回参数 X,从弧度变换为角度。 mysql> select DEGREES(PI()); -> 180.000000 RADIANS(X) 返回参数 X,从角度变换为弧度。 mysql> select RADIANS(90); -> 1.570796 TRUNCATE(X,D) 返回数字 X,截断为 D位小数。如果 D为0,结果将没有小数点或小数部分。 mysql> select TRUNCATE(1.223,1); -> 1.2 mysql> select TRUNCATE(1.999,1); -> 1.9 mysql> select TRUNCATE(1.999,0); -> 1
还剩32页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

ljlrh88

贡献于2013-01-14

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf