第十一章使用数据处理函数
11.1函数
SQL支持函数来处理数据但是函数的可移植性没有SQL强。
11.2使用函数
11.2.1文本处理函数
输入:
SELECT vend_name,UPPER(vend_name) AS vend_name_upcase
FROM vendors
ORDER BY vend_name;
输出:
说明:UPPER()将文本转换为大写。
输入:
SELECT vend_name,LEFT(vend_name,3) AS vend_name_upcase
FROM vendors
ORDER BY vend_name;
输出:
说明:LEFT()函数用来从字符串左侧截取文本,LEFT(要截取的文本,截取的位数)。
输入:
SELECT vend_name,LENGTH(vend_name) AS vend_name_change
FROM vendors
ORDER BY vend_name;
输出:
说明:LENGRH(字符串)函数用来返回字符串的长度。
输入:
SELECT vend_name,LOCATE('ou',vend_name) AS vend_name_change
FROM vendors
ORDER BY vend_name;
输出:
说明:LOCATE(待查找的字符串,被查找的字符串)找出串的一个子串,返回的是子串在串中的位置。
输入:
SELECT vend_name,LOCATE('ou',vend_name,4) AS vend_name_change
FROM vendors
ORDER BY vend_name;
输出:
说明:LOCATE(待查找的字符串,被查找的字符串,从第几个字符串开始查找)从串的第几个位置开始找出串的一个子串,返回的是子串在串中的位置。
输入:
SELECT vend_name,LOWER(vend_name) AS vend_name_change
FROM vendors
ORDER BY vend_name;
输出:
说明:LOWER(字符串)将串转换为小写。
输入:
SELECT vend_name,RIGHT(vend_name,3) AS vend_name_change
FROM vendors
ORDER BY vend_name;
输出:
说明:RIGHT(字符串,截取位数)从右边截取字符串相应的位数。
输入:
SELECT cust_name,cust_contact
FROM customers
WHERE cust_contact = 'Y. Lie';
输出:
输入:
SELECT cust_name,cust_contact
FROM customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Y. Lie');
输出:
说明:SOUNDEX()返回串的SOUNDEX值。SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。虽然SOUNDEX不是SQL概念,但MySQL(就像多数DBMS一样)都提供对SOUNDEX的支持。
第一次查询之所以找不到相应的结果,是因为表中录入的数据存在错误,使用SOUNDEX()函数就可以在读音类似的情况下规避掉这种问题。
输入:
SELECT vend_name,SUBSTR(vend_name FROM 2 FOR 3) AS vend_name_change
FROM vendors
ORDER BY vend_name;
输出:
说明:SUBSTRING(字符串,FROM 开始位数 FOR 子串长度)返回串的子串。
11.2.2日期和时间处理函数
输入:
SELECT cust_id, order_num
FROM orders
WHERE order_date = '2005-09-01';
输出:
说明:MySQL使用的日期格式为yyyy-mm-dd。但是这样的检索中可能存在由于储存的时间不仅仅包含了日期还包含了时间,此时单单凭借日期的检索是很难实现的。
输入:
SELECT cust_id, order_num
FROM orders
WHERE DATE(order_date) = '2005-09-01';
输出:
说明:DATE()函数返回日期时间的日期部分。这样的比较是更加可靠的。
输入:
SELECT TIME('2025-04-08 13:45:00');
输出:
说明:TIME()返回的日期时间的时间部分。
输入:
SELECT ADDDATE('2025-04-08',1);
输出:
说明:ADDDATE(日期,所增加天数/周等),在日期上增加一段时间。
输入:
SELECT ADDDATE('2025-04-08',-1);
输出:
说明:也可以减少,只需要把INTERVAL变为负数即可。
输入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL 2 HOUR);
输出:
说明:增加两个小时。
输入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL -2 HOUR);
输出:
说明:减少两个小时。
输入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL 2 MINUTE);
输出:
说明:增加两分钟。
输入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL -2 MINUTE);
输出:
说明:减少两分钟。
输入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL 2 SECOND);
输出:
说明:增加两秒。
输入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL -2 SECOND);
输出:
说明:减少两秒。
输入:
SELECT ADDDATE('2025-04-08',INTERVAL 2 WEEK);
输出:
说明:可以变更后面的UNIT实现不同时间段的增减。
输入:
SELECT ADDDATE('2025-04-08',INTERVAL -2 WEEK);
输出:
说明:减少两周。
输入:
SELECT ADDDATE('2025-04-08',INTERVAL 2 MONTH);
输出:
说明:变更为MONTH就是两个月的增加。
输入:
SELECT ADDDATE('2025-04-08',INTERVAL -2 MONTH);
输出:
说明:也可以减少,只需要把INTERVAL变为负数即可。
输入:
SELECT ADDDATE('2025-04-08',INTERVAL 2 YEAR);
输出:
说明:也可以增加两年。
输入:
SELECT ADDDATE('2025-04-08',INTERVAL -2 YEAR);
输出:
说明:减少两年。
输入:
SELECT ADDTIME('2025-04-08 14:18:00',2);
输出:
说明:增加两秒。
输入:
SELECT ADDTIME('2025-04-08 14:18:00',-2);
输出:
说明:减少两秒。
输入:
SELECT ADDTIME('2025-04-08 14:18:00',200);
输出:
说明:增加两分钟。
输入:
SELECT ADDTIME('2025-04-08 14:18:00',-200);
输出:
说明:减少两分钟。
输入:
SELECT ADDTIME('2025-04-08 14:18:00','00:01:00');
输出:
说明:增加一分钟。
输入:
SELECT ADDTIME('2025-04-08 14:18:00','-00:01:00');
输出:
说明:减少一分钟。
输入:
SELECT ADDTIME('2025-04-08 14:18:00',10000);
输出:
说明:增加一小时。
输入:
SELECT ADDTIME('2025-04-08 14:18:00',-10000);
输出:
说明:减少一小时。
输入:
SELECT ADDTIME('2025-04-08 14:18:00','01:00:00');
输出:
说明:增加一小时。
输入:
SELECT ADDTIME('2025-04-08 14:18:00','-01:00:00');
输出:
说明:减少一小时。
输入:
SELECT CURDATE();
输出:
说明:返回当前日期。
输入:
SELECT CURTIME();
输出:
说明:返回当前时间。
输入:
SELECT DATEDIFF('2025-04-08','2025-04-10');
输出:
说明:返回两个日期之间的差值。结果以天数形式返回。
输入:
SELECT DATE_ADD('2025-04-08',INTERVAL 2 YEAR);
输出:
说明:DATE_ADD()高度灵活的日期计算函数。这里使用的是在当前日期上增加两年。
输入:
SELECT DATE_ADD('2025-04-08',INTERVAL -2 YEAR);
输出:
说明:在当前日期上减少两年
输入:
SELECT DATE_ADD('2025-04-08',INTERVAL 2 QUARTER),
DATE_ADD('2025-04-08',INTERVAL -2 QUARTER);
输出:
说明:QUARTER是季度的意思。
输入:
SELECT DATE_ADD('2025-04-08',INTERVAL 2 HOUR),DATE_ADD('2025-04-08',INTERVAL -2 HOUR);
输出:
说明:增加或减少两个小时。
输入:
SELECT DATE_FORMAT(CURDATE(), '%Y-%m-%d');
输出:
说明:返回一个格式化的日期或字符串。
输入:
SELECT DATE_FORMAT(CURDATE(), '%Y/%m/%d');
输出:
输入:
SELECT DAY(CURDATE());
输出:
说明:DAY()函数返回一个日期的天数部分。
输入:
SELECT DAYOFWEEK(CURDATE());
输出:
说明:DAYOFWEEK()函数返回对应的星期几。但是这里需要注意数字1对应的是周日,以此类推。这里的3代表的是星期二。
输入:
SELECT HOUR(CURTIME());
输出:
说明:HOUR()函数返回一个时间的小时部分。
输入:
SELECT MINUTE(CURTIME());
输出:
说明:MINUTE()函数返回一个时间的分钟部分。
输入:
SELECT MONTH(CURTIME());
输出:
说明:MONTH()函数返回一个时间的月份部分。
输入:
SELECT SECOND(CURTIME());
输出:
说明:SECOND()函数返回一个时间的秒部分。
输入:
SELECT TIME(CURTIME());
输出:
说明:TIME()函数返回一个日期时间的时间部分。
输入:
SELECT YEAR(CURTIME());
输出:
说明:YEAR()函数返回一个日期的年份部分。
输入:
SELECT NOW();
输出:
说明:NOW()返回当前日期和时间。
11.2.3数值处理函数
输入:
SELECT ABS(-5.2);
输出:
说明:ABS()函数返回一个数的绝对值。
输入:
SELECT COS(PI()/3);
输出:
说明:COS()函数返回一个角度的余弦值。PI()表示π
输入:
SELECT EXP(1);
输出:
说明:EXP()函数返回一个数的指数值。以e为底数。
输入:
SELECT MOD(12,5);
输出:
说明:MOD()函数返回除操作的余数值。
输入:
SELECT RAND();
输出:
说明:RAND()函数返回一个随机数。
输入:
SELECT SIN(PI()/6);
输出:
说明:SIN()函数返回一个角度的正弦值。
输入:
SELECT TAN(PI()/4);
输出:
说明:TAN()函数返回一个角度的正切。
输入:
SELECT SQRT(4);
输出:
说明:SQRT()函数返回一个数的平方根。