MySQL函數的使用

如下列出mysql函數的使用,並不徹底,涉及到多少寫多少。mysql

 

length(str):返回字符串(str)的字符長度。一個漢字算三個字符,一個數字或字母算一個字符。sql

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。spa

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

concat(str1,str2,...):返回全部參數拼接起來產生的字符串。若是有任何一個參數位null,則返回null。code

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

concat_ws(separator,str1,str2,...):返回全部參數拼接起來產生的字符串,第一個參數做爲後面參數拼接的分隔符。若是分隔符爲null,則返回null,除分隔符外的其餘參數爲null,則忽略。orm

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)的子字符串。blog

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

right(str,length):從字符串(str)右起第一個字符開始,返回指定長度(length)的子字符串。ci

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
相關文章
相關標籤/搜索