1. 程式人生 > 資料庫 >MySQL 函式探索

MySQL 函式探索

絕對值
求2,-3.3和-33的絕對值,輸入語句如下:
SELECT ABS(2),ABS(-3.3),ABS(-33);

求餘
用在範圍限制方面,如分母為8,求餘後的數字不會超過8:
SELECT MOD(31,8),MOD(234,10),MOD(45.5,6);
7 4 3.5

向上取整
SELECT CEIL(-3.35),CEILING(3.35);
-3 4

向下取整:
SELECT FLOOR(-3.35),FLOOR(3.35);
-4 3

產生隨機數:
SELECT RAND(),RAND(),RAND();
0.6006078138953148 0.3178217618892172 0.7872853984937868

四捨五入-整數:
SELECT ROUND(-1.14),ROUND(-1.67),ROUND(1.14),ROUND(1.66);
四捨五入-兩位小數:
SELECT ROUND(1.3864,2),ROUND(1.38,0),ROUND(232.38,-1);
1.39 1 230
截斷,非四捨五入
ELECT TRUNCATE(1.31,1),TRUNCATE(1.99,TRUNCATE(19.99,-1);
1.3 1.9 1 10

返回引數的符號:
SELECT SIGN(-21),SIGN(0),SIGN(21);
-1 0 1

【例6.13】使用POW和POWER函式進行乘方運算,輸入語句如下:

SELECT POW(2,POWER(2,POW(2,-2),-2);
【例6.14】使用EXP函式計算e的乘方,輸入語句如下:
SELECT EXP(3),EXP(-3),EXP(0);
【例6.15】使用LOG(x)函式計算自然對數,輸入語句如下:
SELECT LOG(3),LOG(-3);
【例6.16】使用LOG10計算以10為基數的對數,輸入語句如下:
SELECT LOG10(2),LOG10(100),LOG10(-100);
【例6.17】使用RADIANS將角度轉換為弧度,輸入語句如下:
SELECT RADIANS(90),RADIANS(180);
【例6.18】使用DEGREES將弧度轉換為角度,輸入語句如下:
SELECT DEGREES(PI()),DEGREES(PI() / 2);
【例6.19】使用SIN函式計算正弦值,輸入語句如下:
SELECT SIN(1),ROUND(SIN(PI()));
【例6.20】使用ASIN函式計算反正弦值,輸入語句如下:
SELECT ASIN(0.8414709848078965),ASIN(3);
【例6.21】使用COS函式計算餘弦值,輸入語句如下:
SELECT COS(0),COS(PI()),COS(1);
【例6.22】使用ACOS函式計算反餘弦值,輸入語句如下:
SELECT ACOS(1),ACOS(0),ROUND(ACOS(0.5403023058681398));
【例6.23】使用TAN函式計算正切值,輸入語句如下:
SELECT TAN(0.3),ROUND(TAN(PI()/4));
【例6.24】使用ATAN函式計算反正切值,輸入語句如下:
SELECT ATAN(0.30933624960962325),ATAN(1);
【例6.25】使用COT()函式計算餘切值,輸入語句如下,
SELECT COT(0.3),1/TAN(0.3),COT(PI() / 4);
【例6.26】使用CHAR_LENGTH函式計算字串字元個數,輸入語句如下:
SELECT CHAR_LENGTH(‘date’),CHAR_LENGTH(‘egg’);
【例6.27】使用LENGTH函式計算字串長度,輸入語句如下:
SELECT LENGTH(‘date’),LENGTH(‘egg’);
【例6.28】使用CONCAT函式連線字串,輸入語句如下:
SELECT CONCAT(‘My SQL’,‘5.6’),CONCAT(‘My’,NULL,‘SQL’);
【例6.29】使用CONCAT_WS函式連線帶分隔符的字串,輸入語句如下:
SELECT CONCAT_WS(’-’,‘1st’,‘2nd’,‘3rd’),CONCAT_WS(’*’,‘3rd’);
【例6.30】使用INSERT函式進行字串替代操作,輸入語句如下:
SELECT INSERT(‘Quest’,2,4,‘What’) AS col1,
INSERT(‘Quest’,-1,‘What’) AS col2,3,100,‘Wh’) AS col3;
【例6.31】使用LOWER函式或者LCASE函式將字串中所有字母字元轉換為小寫,輸入語句如下:
SELECT LOWER(‘BEAUTIFUL’),LCASE(‘Well’);
【例6.32】使用UPPER函式或者UCASE函式將字串中所有字母字元轉換為大寫,輸入語句如下:
SELECT UPPER(‘black’),UCASE(‘BLacK’);
【例6.33】使用LEFT函式返回字串中左邊的字元,輸入語句如下:
SELECT LEFT(‘football’,5);
【例6.34】使用RIGHT函式返回字串中右邊的字元,輸入語句如下:
SELECT RIGHT(‘football’,4);
【例6.35】使用LPAD函式對字串進行填充操作,輸入語句如下:
SELECT LPAD(‘hello’,’??’),LPAD(‘hello’,10,’??’);
【例6.36】使用RPAD函式對字串進行填充操作,輸入語句如下:
SELECT RPAD(‘hello’,’?’),RPAD(‘hello’,’?’);
【例6.37】使用LTRIM函式刪除字串左邊的空格,輸入語句如下:
SELECT ‘( book )’,CONCAT(’(’,LTRIM(’ book ‘),’)’);
【例6.38】SELECT CONCAT( ‘(’,RTRIM (’ book ‘),‘)’);
SELECT ‘( book )’,’)’);
【例6.39】SELECT CONCAT( ‘(’,TRIM(’ book ‘),’)’);
【例6.40】使用TRIM(s1 FROM s)函式刪除字串中兩端指定的字元,輸入語句如下:
SELECT TRIM(‘xy’ FROM ‘xyxboxyokxxyxy’) ;
【例6.41】使用REPEAT函式重複生成相同的字串,輸入語句如下:
SELECT REPEAT(‘MySQL’,3);
【例6.42】使用SPACE函式生成由空格組成的字串,輸入語句如下:
SELECT CONCAT(’(’,SPACE(6),‘)’ );
【例6.43】使用REPLACE函式進行字串替代操作,輸入語句如下:
SELECT REPLACE(‘xxx.mysql.com’,‘x’,‘w’);
【例6.44】使用STRCMP函式比較字串大小,輸入語句如下:
SELECT STRCMP(‘txt’,‘txt2’),STRCMP(‘txt2’,‘txt’),STRCMP(‘txt’,‘txt’);
【例6.45】使用SUBSTRING函式獲取指定位置處的子字串,輸入語句如下:
SELECT SUBSTRING(‘breakfast’,5) AS col1,
SUBSTRING(‘breakfast’,5,3) AS col2,
SUBSTRING(‘lunch’,-3) AS col3,-5,3) AS col4;
【例6.46】使用MID()函式獲取指定位置處的子字串,輸入語句如下:
SELECT MID(‘breakfast’,5) as col1,
MID(‘breakfast’,3) as col2,
MID(‘lunch’,-3) as col3,3) as col4;
【例6.47】使用LOCATE,POSITION,INSTR函式查詢字串中指定子字串的開始位置,輸入語句如下:
SELECT LOCATE(‘ball’,‘football’),POSITION(‘ball’IN ‘football’),INSTR (‘football’,‘ball’);
【例6.48】使用REVERSE函式反轉字串,輸入語句如下:
SELECT REVERSE(‘abc’);
【例6.49】使用ELT函式返回指定位置字串,輸入語句如下:
SELECT ELT(3,ELT(3,‘net’,‘os’);
【例6.50】使用FIELD函式返回指定字串第一次出現的位置,輸入語句如下:
SELECT FIELD(‘Hi’,‘hihi’,‘Hey’,‘Hi’,‘bas’) as col1,
FIELD(‘Hi’,‘Lo’,‘Hilo’,‘foo’) as col2;
【例6.51】使用FIND_IN_SET()函式返回子字串在字串列表中的位置,輸入語句如下:
SELECT FIND_IN_SET(‘Hi’,‘hihi,Hey,Hi,bas’);
【例6.52】使用MAKE_SET根據二進位制位選取指定字串,輸入語句如下:
SELECT MAKE_SET(1,‘a’,‘b’,‘c’) as col1,
MAKE_SET(1 | 4,‘hello’,‘nice’,‘world’) as col2,‘world’) as col3,
MAKE_SET(0,‘c’) as col4;
【例6.53】使用日期函式獲取系統當前日期,輸入語句如下:
SELECT CURDATE(),CURRENT_DATE(),CURDATE() + 0;
【例6.54】使用時間函式獲取系統當前時間,輸入語句如下:
SELECT CURTIME(),CURRENT_TIME(),CURTIME() + 0;
【例6.55】使用日期時間函式獲取當前系統日期和時間,輸入語句如下:
SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
【例6.56】使用UNIX_TIMESTAMP函式返回UNIX格式的時間戳,輸入語句如下:
SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),NOW();
【例6.57】使用FROM_UNIXTIME函式將UNIX時間戳轉換為普通格式時間,輸入語句如下:
SELECT FROM_UNIXTIME(‘1364098609’);
【例6.58】使用UTC_DATE()函式返回當前UTC日期值,輸入語句如下:
SELECT UTC_DATE(),UTC_DATE() + 0;
【例6.59】使用UTC_TIME()函式返回當前UTC時間值,輸入語句如下:
SELECT UTC_TIME(),UTC_TIME() + 0;
【例6.60】使用MONTH()函式返回指定日期中的月份,輸入語句如下:
SELECT MONTH(‘2013-02-13’);
【例6.61】使用MONTHNAME()函式返回指定日期中的月份的名稱,輸入語句如下:
SELECT MONTHNAME(‘2013-02-13’);
【例6.62】使用DAYNAME()函式返回指定日期的工作日名稱,輸入語句如下:
SELECT DAYNAME(‘2013-02-13’);
【例6.63】使用DAYOFWEEK()函式返回日期對應的周索引,輸入語句如下:
SELECT DAYOFWEEK(‘2011-02-13’);
【例6.64】使用WEEKDAY()函式返回日期對應的工作日索引,輸入語句如下:
SELECT WEEKDAY(‘2011-02-13 22:23:00’),WEEKDAY(‘2011-07-01’);
【例6.65】使用WEEK()函式查詢指定日期是一年中的第幾周,輸入語句如下:
SELECT WEEK(‘2011-02-20’),WEEK(‘2011-02-20’,1);
【例6.66】使用WEEKOFYEAR()查詢指定日期是一年中的第幾周,輸入語句如下:
SELECT WEEK(‘2011-02-20’,3),WEEKOFYEAR(‘2011-02-20’);
【例6.67】使用DAYOFYEAR()函式返回指定日期在一年中的位置,輸入語句如下:
SELECT DAYOFYEAR(‘2011-02-20’);
【例6.68】使用DAYOFYEAR()函式返回指定日期在一個月中的位置,輸入語句如下:
SELECT DAYOFMONTH(‘2011-02-20’);
【例6.69】使用YEAR()函式返回指定日期對應的年份,輸入語句如下:
SELECT YEAR(‘11-02-03’),YEAR(‘96-02-03’);
【例6.70】使用QUARTER()函式返回指定日期對應的季度,輸入語句如下:
SELECT QUARTER(‘11-04-01’);
【例6.71】使用MINUTE()函式返回指定時間的分鐘值,輸入語句如下:
SELECT MINUTE(‘11-02-03 10:10:03’);
【例6.72】使用SECOND()函式返回指定時間的秒值,輸入語句如下:
SELECT SECOND(‘10:05:03’);
【例6.73】使用EXTRACT函式提取日期或者時間值,輸入語句如下:
SELECT EXTRACT(YEAR FROM ‘2011-07-02’) AS col1,
EXTRACT(YEAR_MONTH FROM ‘2011-07-12 01:02:03’) AS col2,
EXTRACT(DAY_MINUTE FROM ‘2011-07-12 01:02:03’) AS col3;
【例6.74】使用TIME_TO_SEC函式將時間值轉換為秒值,輸入語句如下:
SELECT TIME_TO_SEC(‘23:23:00’);
【例6.75】使用SEC_TO_TIME()函式將秒值轉換為時間格式,輸入語句如下:
SELECT SEC_TO_TIME(2345),SEC_TO_TIME(2345)+0,
TIME_TO_SEC(‘23:23:00’),SEC_TO_TIME(84180);
【例6.76】使用DATE_ADD()和ADDDATE()函式執行日期加操作,輸入語句如下:
SELECT DATE_ADD(‘2010-12-31 23:59:59’,INTERVAL 1 SECOND) AS col1,
ADDDATE(‘2010-12-31 23:59:59’,INTERVAL 1 SECOND) AS col2,
DATE_ADD(‘2010-12-31 23:59:59’,INTERVAL ‘1:1’ MINUTE_SECOND) AS col3;
【例6.77】使用DATE_SUB和SUBDATE函式執行日期減操作,輸入語句如下:
SELECT DATE_SUB(‘2011-01-02’,INTERVAL 31 DAY) AS col1,
SUBDATE(‘2011-01-02’,INTERVAL 31 DAY) AS col2,
DATE_SUB(‘2011-01-01 00:01:00’,INTERVAL ‘0 0:1:1’ DAY_SECOND) AS col3;
【例6.78】使用ADDTIME進行時間加操作,輸入語句如下:
SELECT ADDTIME(‘2000-12-31 23:59:59’,‘1:1:1’),ADDTIME(‘02:02:02’,‘02:00:00’);
【例6.79】使用SUBTIME()函式執行時間減操作,輸入語句如下:
SELECT SUBTIME(‘2000-12-31 23:59:59’,SUBTIME(‘02:02:02’,‘02:00:00’);
【例6.80】使用DATEDIFF()函式計算兩個日期之間的間隔天數,輸入語句如下:
SELECT DATEDIFF(‘2010-12-31 23:59:59’,‘2010-12-30’) AS col1,
DATEDIFF(‘2010-11-30 23:59:59’,‘2010-12-31’) AS col2;
【例6.81】使用DATE_FORMAT()函式格式化輸出日期和時間值,輸入語句如下:
SELECT DATE_FORMAT(‘1997-10-04 22:23:00’,‘%W %M %Y’) AS col1,
DATE_FORMAT(‘1997-10-04 22:23:00’,’%D %y %a %d %m %b %j’) AS col2;
【例6.82】使用TIME_FORMAT()函式格式化輸入時間值,輸入語句如下:
SELECT TIME_FORMAT(‘16:00:00’,‘%H %k %h %I %l’);
【例6.83】使用GET_FORMAT()函式顯示不同格式化型別下的格式字串,輸入語句如下:
SELECT GET_FORMAT(DATE,‘EUR’),GET_FORMAT(DATE,‘USA’);
【例6.84】在DATE_FORMAT()函式中,使用GET_FORMAT函式返回的顯示格式字串來顯示指定的日期值,輸入語句如下:
SELECT DATE_FORMAT(‘2000-10-05 22:23:00’,‘USA’) );
【例6.85】使用IF()函式進行條件判斷,輸入語句如下:
SELECT IF(12,
IF(1<2,'yes ',‘no’),
IF(STRCMP(‘test’,‘test1’),‘no’,‘yes’);
【例6.86】使用IFNULL()函式進行條件判斷,輸入語句如下:
SELECT IFNULL(1,IFNULL(NULL,IFNULL(1/0,‘wrong’);
【例6.87】使用CASE value WHEN語句執行分支操作,輸入語句如下:
SELECT CASE 2 WHEN 1 THEN ‘one’ WHEN 2 THEN ‘two’ ELSE ‘more’ END;
【例6.88】使用CASE WHEN語句執行分支操作,輸入語句如下:
SELECT CASE WHEN 1<0 THEN ‘true’ ELSE ‘false’ END;
【例6.89】檢視當前MySQL版本號,輸入語句如下:
SELECT VERSION();
【例6.90】檢視當前使用者的連線數,輸入語句如下:
SELECT CONNECTION_ID();
【例6.91】使用SHOW PROCESSLIST命令輸出當前使用者的連線資訊,輸入語句如下:
SHOW PROCESSLIST;
【例6.92】檢視當前使用的資料庫,輸入語句如下:
SELECT DATABASE(),SCHEMA();
【例6.93】獲取當前登入使用者名稱稱,輸入語句如下:
SELECT USER(),CURRENT_USER(),SYSTEM_USER();
【例6.94】使用CHARSET()函式返回字串使用的字符集,輸入語句如下:
SELECT CHARSET(‘abc’),
CHARSET(CONVERT(‘abc’ USING latin1)),
CHARSET(VERSION());
【例6.95】使用COLLATION()函式返回字串排列方式,輸入語句如下:
SELECT COLLATION(‘abc’),COLLATION(CONVERT(‘abc’ USING utf8));
【例6.96】使用SELECT LAST_INSERT_ID檢視最後一個自動生成的列值,執行過程如下:
1.一次插入一條記錄
首先建立表worker,其Id欄位帶有AUTO_INCREMENT約束,輸入語句如下:
CREATE TABLE worker (Id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
Name VARCHAR(30));
分別單獨向表worker中插入2條記錄:
INSERT INTO worker VALUES(NULL,‘jimy’);

INSERT INTO worker VALUES(NULL,‘Tom’);

SELECT * FROM worker;

檢視已經插入的資料可以發現,最後一條插入的記錄的Id欄位值為2,使用LAST_INSERT_ID()檢視最後自動生成的Id值:
SELECT LAST_INSERT_ID();
2.一次同時插入多條記錄
接下來,向表中插入多條記錄,輸入語句如下:
INSERT INTO worker VALUES
(NULL,‘Kevin’),(NULL,‘Michal’),‘Nick’);
查詢已經插入的的記錄,
SELECT * FROM worker;
SELECT LAST_INSERT_ID();

【例6.97】使用PASSWORD函式加密密碼,輸入語句如下:
SELECT PASSWORD(‘newpwd’);

【例6.98】使用MD5函式加密字串,輸入語句如下:
SELECT MD5 (‘mypwd’);

【例6.99】使用ENCODE加密字串,輸入語句如下:
SELECT ENCODE(‘secret’,‘cry’),LENGTH(ENCODE(‘secret’,‘cry’));

【例6.100】使用DECODE函式解密被ENCODE加密的字串,輸入語句如下:
SELECT DECODE(ENCODE(‘secret’,‘cry’);

【例6.101】使用FORMAT函式格式化數字,保留小數點位數為指定值,輸入語句如下:
SELECT FORMAT(12332.123456,4),FORMAT(12332.1,FORMAT(12332.2,0);

【例6.102】使用CONV函式在不同進位制數值之間轉換,輸入語句如下:
SELECT CONV(‘a’,16,
CONV(15,16);

【例6.103】使用INET_ATON函式將字串網路點地址轉換為數值網路地址,輸入語句如下:
SELECT INET_ATON(‘209.207.224.40’);
【例6.104】使用INET_NTOA函式將數值網路地址轉換為字串網路點地址,輸入語句如下:
SELECT INET_NTOA(3520061480);

【例6.105】使用加鎖、解鎖函式,輸入語句如下:
SELECT GET_LOCK(‘lock1’,10) AS GetLock,
IS_USED_LOCK(‘lock1’) AS ISUsedLock,
IS_FREE_LOCK(‘lock1’) AS ISFreeLock,
RELEASE_LOCK(‘lock1’) AS ReleaseLock;

【例6.106】使用BENCHMARK重複執行指定函式。
首先,使用PASSWORD函式加密密碼,輸入語句如下:
SELECT PASSWORD ( ‘newpwd’ );

可以看到,PASSWORD執行花費時間為0.00sec,下面使用BENCHMARK函式重複執行PASSWORD操作500000次:
SELECT BENCHMARK( 500000,PASSWORD (‘newpwd’) );

【例6.107】使用CONVERT()函式改變字串的預設字符集,輸入語句如下:
SELECT CHARSET(‘string’),CHARSET(CONVERT(‘string’ USING latin1));

【例6.108】使用CAST和CONVERT函式進行資料型別的轉換,SQL語句如下:
SELECT CAST(100 AS CHAR(2)),CONVERT(‘2010-10-01 12:12:12’,TIME);