MySQL支持的函数

函数

SQL支持利用函数来处理数据,给数据的处理和转换提供了方便

函数没有SQL的强可移植性

多数SQL语句是可移植的,在不同实现之间差异不大。而函数可移植性不大,主要的DBMS的实现都支持其他不支持的函数,而且差异还很大
如果使用函数,应该做好代码注释,确切表明编写的SQL代码的含义。因为如果DBMS不同,编写应用程序代码会不同

使用函数

  • 处理文本串
    删除、填充值,转换值大小写
  • 在数值数据上进行算数操作
    返回绝对值,进行代数运算
  • 处理日期和时间值并从这些值中提取特定成分的日期和时间
    返回两个日期差,检查日期有效性
  • 返回DBMS正使用的特殊信息对的系统函数
    返回用户登录信息,检查版本细节

文本处理函数

举例

  • TRIM() 去空格
  • UPPER() 转换为大写
SELECT
	vend_name,
	UPPER( vend_name ) AS vend_name_upcase 
FROM
	vendors 
ORDER BY
	vend_name;

image.png

常用的文本处理函数

  • LEFT() 返回串左边串的字符
  • LENGTH() 返回串的长度
  • LOCATE() 找出一个串的子串
  • LOWER() 将串转换为小写
  • LTRIM() 去串左边空格
  • RIGHT() 返回串右边的字符
  • RTRIM() 去串右边空格
  • SOUNDEX() 返回串的SOUNDEX值
  • SUBSTRING() 返回子串的字符
  • UPPER() 将串转换为大写

关于SOUNDEX()

SOUNDEX是一个将任何文本串转换为其语音表示的字母数字模式的算法,能对串进行发音比较而不是字母比较。与多是DBMS一样,MySQL提供了对SOUNDEX的支持

  • 举例
    image.png
    客户表中有一个客户联系名为Y Lee,如果录入信息时错误,实际客户为Y Lie。那么按照正确的名字搜索也不会返回数据。
    使用SOUNDEX()函数进行搜索会匹配所有发音类似Y Lie的联系名
SELECT
	cust_name,
	cust_contact 
FROM
	customers 
WHERE
	SOUNDEX( cust_contact ) = SOUNDEX( "Y Lie" );

image.png

日期和时间处理函数

日期和时间采用相应的数据类型和特殊的格式存储,以便能快速和有效地排序或过滤,并且节省物理存储空间。

常用日期和时间处理函数

  • ADDDATE()
    增加一个日期(天、周等)
  • ADDTIME()
    增加一个时间(时、分等)
  • CURDATE()
    返回当前日期
  • CURTIME()
    返回当前时间
  • DATE()
    返回日期时间的日期部分
  • DATEDIFF()
    计算两个日期之差
  • DATE_ADD()
    高度灵活的日期运算函数
  • DATE_FORMAT()
    返回一个格式化的日期或时间串
  • DAY()
    返回一个日期的天数部分
  • DAYOFWEEK()
    返回对应的星期几
  • HOUR()
    返回小时部分
  • MINUTE()
    返回分钟部分
  • MONTH()
    返回月份部分
  • NOW()
    返回当前日期和时间
  • SECOND()
    返回秒部分
  • TIME()
    返回时间部分
  • YEAR()
    返回年份部分

注意格式

MySQL的日期格式最好指定为yyyy-mm-dd,这样的日期格式排除了多义性。

SELECT
	cust_id,
	order_num,
	order_date 
FROM
	orders 
WHERE
	order_date = "2005-09-01";

image.png

日期部分比较

指示MySQL仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较,使用Date()函数。

SELECT
	cust_id,
	order_num,
	order_date 
FROM
	orders 
WHERE
	DATE(order_date) = "2005-09-01";
  • 如果要的是日期,使用Date(),即使相应的列值包含日期也是如此。这样如果以后该列中有日期和时间值,SQL代码也不用更改

日期范围检索

  • 检索9月份下的信息
    1.使用BETWEEN AND连接首尾日期,结果集包含首位日期
SELECT
	cust_id,
	order_num,
	order_date 
FROM
	orders 
WHERE
	DATE( order_date ) BETWEEN "2005-09-01" 
	AND "2005-09-30";

image.png
2.使用YEAR()和MONTH()函数
由于日期不是文本内容,所以不强求加引号,当然也可以加

SELECT
	cust_id,
	order_num,
	order_date 
FROM
	orders 
WHERE
	YEAR ( order_date )= 2005 
	AND MONTH ( order_date )= 9;

image.png

数值处理函数

数值处理函数仅处理数值数据。一般主要用于代数、三角或几何运算,因此使用并不频繁

常用数值处理函数

  • ABS() 返回绝对值
  • COS() 返回角度余弦值
  • EXP() 返回数值指数值
  • MOD() 返回除操作余数
  • PI() 返回圆周率
  • RAND() 返回一个随机数
  • SIN() 返回一个角度正弦
  • SQRT() 返回一个数的平方根
  • TAN() 返回一个角度的正切

这个家伙很懒,啥也没有留下😋