• MySQL函数的使用


    以下列出mysql函数的使用,并不完全,涉及到多少写多少。

    length(str):返回字符串(str)的字符长度。一个汉字算三个字符,一个数字或字母算一个字符。

    select length('测试');        -- 6
    select length('123abc');    -- 6

    char_length(str):返回字符串(str)的字符长度。一个汉字、数字或字母都算一个字符。

    select char_length('测试');        -- 2
    select char_length('123abc');    -- 6

    instr(str,substr):返回指定字符串(substr)在字符串(str)中的第一次出现的位置。如果未找到则返回0。

    select instr('football','f');    -- 1
    select instr('football','o');    -- 2
    select instr('football','ba');    -- 5

    locate(substr,str):返回指定字符串(substr)在字符串(str)中的第一次出现的位置。如果未找到则返回0。

    select locate('ba','football');        -- 5
    select locate('o','football');        -- 2

    locate(substr,str,pos):返回指定字符串(substr)在字符串(str)中的第(pos)位之后第一次出现的位置。如果未找到则返回0。

    select locate('o','football',3);    -- 3
    select locate('o','football',4);    -- 0

    concat(str1,str2,...):返回所有参数拼接起来产生的字符串。如果有任何一个参数位null,则返回null。

    select concat('w','h','at');        -- what
    select concat('w','h','at',null);    -- null

    concat_ws(separator,str1,str2,...):返回所有参数拼接起来产生的字符串,第一个参数作为后面参数拼接的分隔符。如果分隔符为null,则返回null,除分隔符外的其他参数为null,则忽略。

    select concat_ws(',','first','second','third');    -- first,second,third
    select concat_ws(';','11','22','33',null);        -- 11;22;33
    select concat_ws(null,'11','22','33',null);        -- null

    left(str,length):从字符串(str)左起第一个字符开始,返回指定长度(length)的子字符串。

    select left('mysql',2);        -- my

    right(str,length):从字符串(str)右起第一个字符开始,返回指定长度(length)的子字符串。

    select right('mysql',3);    -- sql

    substring(str,pos):返回字符串(str)从第(pos)个字符开始之后的所有字符组成的子字符串。pos为正数,从左起;pos为负数,从右起。

    select substring('everyone',3);        -- eryone
    select substring('everyone',-3);    -- one

    substring(str,pos,length):返回字符串(str)从第(pos)个字符开始,之后指定长度(length)的子字符串。pos为正数,从左起;pos为负数,从右起。

    select substring('everyone',1,5);    -- every
    select substring('everyone',-3,3);    -- one

    substring_index(str,delim,count):返回从字符串(str)第一个字符开始,到字符串中第(count)次出现的分隔符(delim)之间的子字符串。count为正数,从左起;count为负数,从右起。
    如果在字符串(str)中未找到分隔符(delim)的位置,或者未找到指定次数(count)出现的分隔符的位置时,则返回整个字符串。分隔符(delim)不一定为符号,也可以为其它自定义字符。

    select substring_index('11;22;33;',';',2);    -- 11;22
    select substring_index('11;22;33;',',',2);    -- 11;22;33;
    select substring_index('11;22;33;',';',-2);    -- 33;

    convert(value,type):类型或格式转换。可转换的类型是有限制的,可以是以下类型中之一:binary、char(n)、date、time、datetime、decimal、signed、unsigned。

    -- 数字转换为字符串
    select convert(33,char);    -- 33(字符串类型)
    -- 字符串转换为数字
    select convert('333',signed);    -- 333(数字值类型)
    
    -- 把字符串编码格式转换为Unicode编码格式
    select convert('' using ucs2);
    -- 把字符串编码格式转换为UTF8编码格式
    select convert('abc' using utf8);
    -- 把字符串编码格式转换为GBK编码格式
    select convert('' using gbk);
    -- 把字符串编码格式转换为GB2312编码格式
    select convert('' using gb2312);

    cast(value as type):类型转换。可转换的类型是有限制的,可以是以下类型中之一:binary、char(n)、date、time、datetime、decimal、signed、unsigned。

    -- 数字转换为字符串
    select cast(333 as char);
    -- 字符串转换为数字
    select cast('3333' as signed);

    hex(str):把指定的字符串(str)转换为16进制值。

    -- 把字符串转换为16进制值
    select hex(convert('' using ucs2));    -- 4E00

    unhex(str):把指定的16进制字符串(str)转换为字符串。

    -- 把16进制值转换为字符串
    select convert(unhex('4E00') using ucs2);    --

    ord(str):把指定的字符串(str)转换为ASCII值。

    -- 把字符串转换为ASCII值
    select ord(convert('A' using ucs2));    -- 65
    select ord(convert('' using ucs2));    -- 19968

    ascii(str):把指定的字符串(str)转换为ASCII值。

    -- 把字符串转换为ASCII值
    select ascii(convert('A' using utf8));    -- 65

    now():获取当前的日期与时间,即“YYYY-MM-dd HH:mm:ss”格式。

    -- 获取当前日期时间
    select now();    -- 2018-11-16 15:11:26

    current_timestamp():获取当前的时间戳,即“YYYY-MM-dd HH:mm:ss”格式。

    -- 获取当前的时间戳
    select current_timestamp;    -- 2018-11-16 15:11:26
    select current_timestamp();    -- 2018-11-16 15:11:26

    curdate():获取当前的日期,即“YYYY-MM-dd”格式。

    -- 获取当前的日期
    select curdate();    -- 2018-11-16

    current_date():获取当前的日期,即“YYYY-MM-dd”格式。

    -- 获取当前的日期
    select current_date();        -- 2018-11-16

    curtime():获取当前的时间,即“HH:mm:ss”格式。

    -- 获取当前的时间
    select curtime();    -- 15:11:26

    current_time():获取当前的时间,即“HH:mm:ss”格式。

    -- 获取当前的时间
    select current_time();    -- 15:11:26

    last_day(datetime):获取指定的日期时间中月份的最后一天,可以借此获取指定的月份有多少天。

    -- 获取指定的日期时间中月份的最后一天
    select last_day('2018-10-10');    -- 2018-10-31
    select last_day('2018-10-10 12:30:30');    -- 2018-10-31
    select day(last_day('2018-10-10'));        -- 31

    dayofweek(datetime):获取指定的日期时间是星期几。(1表示星期日,2表示星期一。。。7表示星期六,ODBC标准)

    -- 获取指定的日期时间是星期几
    select dayofweek('2018-10-10');    -- 4
    select dayofweek('2018-10-10 12:30:30');    -- 4

    weekday(datetime):获取指定的日期时间是星期几。(0表示星期一,1表示星期二。。。6表示星期日)

    -- 获取指定的日期时间是星期几
    select weekday('2018-10-10');    -- 2
    select weekday('2018-10-10 12:30:30');    -- 2

    dayofmonth(datetime):获取指定的日期时间中是该月的第几天。(返回值范围为1至31)

    -- 获取指定的日期时间中是该月的第几天
    select dayofmonth('2018-10-10');    -- 10
    select dayofmonth('2018-10-10 12:30:30');    -- 10

    dayofyear(datetime):获取指定的日期时间中是该年的第几天。

    -- 获取指定的日期时间中是该年的第几天
    select dayofyear('2018-10-10');    -- 283
    select dayofyear('2018-10-10 12:30:30');    -- 283

    dayname(datetime):获取指定的日期时间是星期几的英文。

    -- 获取指定的日期时间是星期几的英文
    select dayname('2018-10-10');    -- Wednesday
    select dayname('2018-10-10 12:30:30');    -- Wednesday

    monthname(datetime):获取指定的日期时间中月份的英文。

    -- 获取指定的日期时间中月份的英文
    select monthname('2018-10-10');    -- October
    select monthname('2018-10-10 12:30:30');    -- October

    quarter(datetime):获取指定的日期时间是当年的第几季度。(1至3月表示第一季度。。。9-12月表示第四季度)

    -- 获取指定的日期时间是当年的第几季度
    select quarter('2018-10-10');    -- 4
    select quarter('2018-10-10 12:30:30');    -- 4

    sec_to_time(second):把秒数转换为时间。

    -- 把秒数转换为时间
    select sec_to_time(120);    -- 00:02:00
    select sec_to_time(3600);    -- 01:00:00

    time_to_sec(time):把时间转换为秒数。

    -- 把时间转换为秒数
    select time_to_sec('00:02:00');    -- 120
    select time_to_sec('01:00:00');    -- 3600

    date_format(datetime,format):获取指定格式的日期时间。

    -- 获取指定格式的日期时间
    -- 格式    描述
    -- %a    缩写星期名(Sun、Sat等)
    -- %b    缩写月名(Jan、Dec等)
    -- %c    月,数值(1-12)
    -- %D    带有英文前缀的月中的天(1th、3th、10th等)
    -- %d    月的天,数值(00-31)
    -- %e    月的天,数值(0-31)
    -- %f    微秒
    -- %H    小时 (00-23)
    -- %h    小时 (01-12)
    -- %I    小时 (01-12)
    -- %i    分钟,数值(00-59)
    -- %j    年的天 (001-366)
    -- %k    小时 (0-23)
    -- %l    小时 (1-12)
    -- %M    月名(January、October等)
    -- %m    月,数值(01-12)
    -- %p    AM 或 PM
    -- %r    时间,12-小时(hh:mm:ss AM 或hh:mm:ss PM)
    -- %S    秒(00-59)
    -- %s    秒(00-59)
    -- %T    时间, 24-小时 (hh:mm:ss)
    -- %U    周 (00-53) 星期日是一周的第一天
    -- %u    周 (00-53) 星期一是一周的第一天
    -- %V    周 (01-53) 星期日是一周的第一天,与 %X 使用
    -- %v    周 (01-53) 星期一是一周的第一天,与 %x 使用
    -- %W    星期名
    -- %w    周的天 (0=星期日, 6=星期六)
    -- %X    年,其中的星期日是周的第一天,4 位,与 %V 使用
    -- %x    年,其中的星期一是周的第一天,4 位,与 %v 使用
    -- %Y    年,4 位
    -- %y    年,2 位
    select date_format('2018-10-10','%Y-%m-%d %H:%i:%s');    -- 2018-10-10 00:00:00
    select date_format('2018-10-10 12:30:30','%Y-%m-%d');    -- 2018-10-10

    time_format(datetime,format):获取指定格式的时间。该方法与date_format()方法类似,但time_format()方法只处理时间部分。

    -- 获取指定格式的时间。
    select time_format('12:30:30','%H:%i:%s');    -- 12:30:30
    select time_format('12:30:30','%r');    -- 12:30:30 PM

    str_to_date(datetime,format):将指定的字符串转换为日期时间的格式,即转换为“YYYY-MM-dd HH:mm:ss”的格式。

    -- 将指定的字符串转换为日期时间的格式
    select str_to_date('10/25/2018','%m/%d/%Y');    -- 2018-10-25
    select str_to_date('10.25.2018 12.30.30','%m.%d.%Y %H.%i.%s');    -- 2018-10-25 12:30:30

    makedate(year,dayofyear):获取根据多个值拼成的日期。第一个参数表示年份,第二个参数表示指定该年的第多少天。

    -- 获取根据多个值拼成的日期
    select makedate(2018,180);    -- 2018-06-29
    select makedate(2018,15);    -- 2018-01-15

    maketime(hour,minute,second):获取根据多个值拼成的时间。

    -- 获取根据多个值拼成的时间
    select maketime(12,20,30);    -- 12:20:30
    select maketime(23,59,59);    -- 23:59:59

    timestamp(datetime_exp1[,datetime_exp2]):获取指定日期时间的时间戳,以及两个日期时间的相加运算。

    -- 获取指定日期时间的时间戳
    select timestamp('2018-10-10');    -- 2018-10-10 00:00:00
    select timestamp('2018-10-10 12:30:30');    -- 2018-10-10 12:30:30
    
    -- 获取两个指定日期时间的参数的和的时间戳,即第一个日期时间加上第二个时间的和
    select timestamp('2018-10-10 12:30:30','01:01:01');    -- 2018-10-10 13:31:31
    -- 最多只能指定到日,不能指定月和年
    select timestamp('2018-10-10 12:30:30','01 01:01:01');    -- 2018-10-11 13:31:31

    timestampadd(unit,interval,datetime):在指定的年、月、日、小时、分钟、秒等单位上加上指定的值。

    -- 在指定的年、月、日、小时、分钟、秒等单位上加上指定的值
    select timestampadd(day,1,'2018-10-10 12:30:30');        -- 2018-10-11 12:30:30
    select timestampadd(month,1,'2018-10-10 12:30:30');        -- 2018-11-10 12:30:30

    timestampdiff(unit,datetime_exp1,datetime_exp2):比较两个日期时间相差的指定的年、月、日、小时、分钟、秒等单位的值。

    -- 比较两个日期时间相差的指定的年、月、日、小时、分钟、秒等单位的值
    select timestampdiff(day,'2018-10-11 12:30:30','2018-11-10 12:30:30');        -- 30
    select timestampdiff(hour,'2018-10-11 12:30:30','2018-11-10 12:30:30');        -- 720

    datediff(datetime_exp1,datetime_exp2):比较两个日期时间中,第一个日期时间相对于第二个日期时间相差的天数。

    -- 比较两个日期时间中,第一个日期时间相对于第二个日期时间相差的天数
    select datediff('2018-10-11','2018-11-10');        -- -30
    select datediff('2018-12-20 12:00:00','2018-10-25 12:30:30');        -- 56

    timediff(time_exp1,time_exp2):比较两个时间中,第一个时间相对于第二个时间相差的时:分:秒。

    -- 比较两个时间中,第一个时间相对于第二个时间相差的时:分:秒
    select timediff('09:00:00','12:30:30');        -- -03:30:30
    select timediff('12:00:00','08:30:30');        -- 03:29:30

    date_add(datetime,interval value unit):在指定的日期时间上增加指定的年、月、日、小时、分钟、秒等单位的值。

    -- 在指定的日期时间上增加指定的年、月、日、小时、分钟、秒等单位的值
    select date_add('2018-10-10',interval 1 day);            -- 2018-10-11
    select date_add('2018-10-10 12:30:30',interval 3 month);        -- 2019-01-10 12:30:30
    select date_add('2018-10-10 12:30:30',interval -10 minute);        -- 2018-10-10 12:20:30

    date_sub(datetime,interval value unit):在指定的日期时间上减少指定的年、月、日、小时、分钟、秒等单位的值。

    -- 在指定的日期时间上减少指定的年、月、日、小时、分钟、秒等单位的值
    select date_sub('2018-10-10',interval 1 day);            -- 2018-10-09
    select date_sub('2018-10-10 12:30:30',interval 3 month);        -- 2018-07-10 12:30:30
    select date_sub('2018-10-10 12:30:30',interval -10 minute);        -- 2018-10-10 12:40:30

     获取指定的日期时间中指定的年、月、日、小时、分钟、秒等单位的值。

    set @dt='2018-10-10 12:30:30.123456';
    select date(@dt);         -- 2018-10-10
    select time(@dt);         -- 12:30:30.123456
    select year(@dt);         -- 2018
    select quarter(@dt);     -- 4
    select month(@dt);         -- 10
    select week(@dt);         -- 40
    select day(@dt);         -- 10
    select hour(@dt);         -- 12
    select minute(@dt);     -- 30
    select second(@dt);     -- 30
    select microsecond(@dt); -- 123456
    select yearweek(@dt);      -- 201840

    extract(unit from datetime):获取指定的日期时间中指定的年、月、日、小时、分钟、秒等单位的值。

    set @dt='2018-10-10 12:30:30.123456';
    select extract(year from @dt);             -- 2018
    select extract(quarter from @dt);         -- 4
    select extract(month from @dt);         -- 10
    select extract(week from @dt);             -- 40
    select extract(day from @dt);             -- 10
    select extract(hour from @dt);             -- 12
    select extract(minute from @dt);         -- 30
    select extract(second from @dt);         -- 30
    select extract(microsecond from @dt);     -- 123456
    
    select extract(year_month from @dt);             -- 201810
    select extract(day_hour from @dt);                 -- 1012
    select extract(day_minute from @dt);             -- 101230
    select extract(day_second from @dt);             -- 10123030
    select extract(day_microsecond from @dt);         -- 10123030123456
    select extract(hour_minute from @dt);             -- 1230
    select extract(hour_second from @dt);             -- 123030
    select extract(hour_microsecond from @dt);         -- 123030123456
    select extract(minute_second from @dt);         -- 3030
    select extract(minute_microsecond from @dt);     -- 3030123456
    select extract(second_microsecond from @dt);     -- 30123456
  • 相关阅读:
    centos中pipelinedb安装及初步使用
    sqlalchemy 的操作
    存储引擎,索引,慢日志,权限管理
    python使用mysql
    mysql数据库查找数据的方法。
    mysql 数据库的基本操作
    epoll 数据库安装以及相关概念
    IO模型,非阻塞IO模型,select实现多路复用
    线程回调,线程中的队列,事件,greenlet模块,gevent模块,自定义补丁, 单线程实现并发,协程
    GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调
  • 原文地址:https://www.cnblogs.com/Brambling/p/9259631.html
Copyright © 2020-2023  润新知