大纲

1、函数

2、文本处理函数

3、数值计算函数

4、日期处理函数

5、聚集函数

1、函数

函数好用,但是不通用:

函数大致可以分为以下类型:用于处理文本串

用于处理日期和时间

用于数值计算

返回DBMS系统信息

如何知道函数怎么使用?

2、mysql> help functions;

然后,根据自己的需要,查看具体的函数类别。

MySQL中使用函数时,函数名和左括号之间不能有空格。ERROR 1305 (42000)Bug #61795  已经修复, Version> 5.1.41-3

2、文本处理函数

文本处理函数可以很方便的帮助我们进行一些处理。比如大小写转换(UPPER, LOWER),去除空格(TRIM, RTRIM, LTRIM),以及取出串的一部分或者填充等等。

SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。mysql> SELECT cust_name

FROM customers

WHERE SOUNDEX(cust_name) = SOUNDEX('Y. lie');

在前面的学习过程,我们提到:默认情况下,MySQL在进行文本比较的时候,是不区分大小写的。这取决于MySQL的设置。我们如何避免这种情况呢? 在比较的时候,同时转为大写或小写即可,保持统一。WHERE UPPER(name) = UPPER('skypeGNU');

3、数值计算函数

数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角函数或几何运算,因此没有串或日期时间处理函数的使用那么频繁。

4、日期处理函数(日期也存储为字符串格式)

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

日期和时间类型有DATETIME, DATE, TIME,TIMESTAMP, YEAR。每一个类型都有一个合法值范围。注意MySQL允许存储某个“不严格的”的日期值,例如 1999-11-31,原因是我们认为日期的合法性检查应该是应用程序的责任,而不是数据库服务器。为了效率,MySQL仅检查月份在0-12,天在0-31的范围即认为是合法的。下面看一个各个日期类型:

Date:A date. The supported range is '1000-01-01' to '9999-12-31'. MySQL displays DATE values in 'YYYY-MM-DD' format, but allows you to assign values to DATE columns using either strings

or numbers.

由于DATE类型只存储日期信息,所以如果添加的数据中包含时间信息,该时间信息将会自动被截断。如果想要保存时间信息,可以考虑使用DATETIME类型。

对DATE类型的字段进行填充:# 按字符串

INSERT INTO time_tbl(test_date) VALUES('2014-11-30');

# 按数字

INSERT INTO time_tbl(test_date) VALUES(20141130);

DateTime

A date and time combination. The supported range is '1000-01-01 00:00:00 ' to '9999-12-31 23:59:59'. MySQL displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format, but allows you to assign values to DATETIME columns using either strings or numbers.

允许以字符串和数字进行提交。# 按字符串

INSERT INTO time_tbl(test_datetime) VALUES('2014-11-30 21:02:13');

# 按数字

INSERT INTO time_tbl(test_datetime) VALUES(20141130210213);

TimeStamp

A timestamp. The range is '1970-01-01 00:00:00' to partway through the     year 2037. A TIMESTAMP column is useful for recording the date and time of an IN    SERT or UPDATE operation. The first TIMESTAMP column in a table is automatically     set to the date and time of the most recent operation if you don't assign it a     value yourself. You can also set any TIMESTAMP column to the current date and time by assigning it a NULL value.

TIMESTAMP类型有一个特性:默认情况下,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充。向其提交NULL值也会使该列以当前时间戳录入。

根据上面给出的表格,我们可以很容易的选择哪种类型。但是TIMESTAMP和DATETIME有什么不同呢?timestamp比datetime类型所需的存储空间更小,只需4个字节,而datetime需要8个字节

timestamp支持表示的日期时间范围比timedate小,很容易超过这个范围

timestamp受时区,mysql版本和服务器SQL MODE的影响

所以,建议使用 datetime 类型。

首先需要注意的是MySQL使用的日期格式。无论你什么时候指定一个日期。不管是插入或更新表值还是用WHERE子句进行过滤,日期必须为格式yyyy-mm-dd。虽然其他的日期格式可能也行,但这是首选的日期格式,因为它排除了多义性。应该总是使用4位数字的年份,他们更可靠,因为MySQL不必做出任何假定。SELECT cust_id, order_num

FROM orders

WHERE order_date = '2005-09-01';

其实,在内部日期和时间也是存储为字符串。所以可以按照字符串比较的方式进行。

但是,使用WHERE order_date = '2005-09-01';可靠吗?datetime这种类型存储日期和时间值,但是我们仅给出了日期值。怎么办?

解决办法是指示MySQL仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。SELECT cust_id, order_num

FROM orders

WHERE DATE(order_date) = '2005-09-01';   # DATE()

最佳实践:如果要的是日期,请使用DATE()。如果只想要时间,应该使用TIME()函数。

如果想检索出2005年9月,下的所有订单,怎么办?SELECT cust_id, order_num

FROM orders

WHERE DATE(order_date) BETWEEN '2005-09-01' AND '2005-09-30';

另外还有一种方法(一种不需要记住每个月中有多少天或不需要操心闰2月的办法)SELECT cust_id, order_num

FROM orders

WHERE YEAR(order_date) = 2005 AND MONTH(order_date) = 9;

强烈推荐这种方法。

下面来几个实例:# 查询当天的数据

WHERE DATE(时间字段) = DATE(now())

# 查询N天内的记录

WHERE TO_DAYS(now()) - TO_DAYS(时间字段) <= N

# 查询一周

WHERE DATE(DATE_SUB(CURDATE(), INTERVAL 7 DAY)) <= DATE(column_time)

# 查询一个月

WHERE DATE(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) <= DATE(column_time)

5、聚集函数

函数分为单行函数和多行函数。对于单行函数,一个输入对应一个输出。对于多行函数,多个输入对应一个输出。

聚集函数 - 运行在行组上,计算和只返回单行记录的函数。确定表中行数(或者满足某个条件或包含某个特定值的行数)

获得表中行组的和

找出表列(或所有行或某些特定行)的最大值、最小值、平均值

聚集函数(aggregate function) 运行在多个行组上,计算和返回单个值的函数。

想象一下,如果MySQL没有提供这些函数,比如想求平均值怎么办? 首先会把所有的数据查询出来,然后进行遍历,相加,然后才能求平均值。是不是效率相当低下?

聚集函数对表中的数据(而不是实际数据本身)汇总。它们是高效设计的,它们返回结果一般比在客户机应用程序计算要快的多。

COUNT() 函数有2种使用方式:使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是NULL还是非NULL的值。

使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值的行。

上述列出的函数,对于NULL值的行,除了COUNT(*),其他聚集函数都是忽略NULL值的行。

在多个列上进行计算

利用标准的 算术操作符(+ - * /),所有聚集函数都可以用来执行多个列上的计算。# 比如

SUM(item_price * quantity)

聚集不同值

以上5个聚集函数都可以如下使用:对所有的行执行计算,指定ALL参数或不给参数

如果想只包含不同的值,指定DISTINCT参数。

ALL为默认。如果不指定DISTINCT, 则假定为ALL。mysql> SELECT AVG(DISTINCT prod_price) avg_price

如果指定列名,则DISTINCT只能用于COUNT(column)。DISTINCT不能用于COUNT(*),否则错误。

类似的,DISTINCT必须使用列名,不能用于计算或表达式。

想想下面这种情况:SELECT prod_price, MAX(prod_price) FROM products;

最好不要做,因为多行函数仅会返回一行。所以最终的结果以MAX的基准,只返回一行而已。

mysql 51cto 函数_MySQL入门-8:函数相关推荐

  1. mysql 存储过程 队列_mysql使用存储过程函数实现批量插入

    写这边文章的目的,是想结合mysql 存储过程+函数完成一个批量删除的功能吧...正好也好加深下对procedure和function的熟练操作吧... 废话不多说,我就直接上表结构啦哈,如下: cr ...

  2. mysql算法函数_mysql中的函数总结

    mysql中常用日期时间函数 MySQL服务器中的三种时区设置: ①系统时区---保存在系统变量system_time_zone ②服务器时区---保存在全局系统变量global.time_zone ...

  3. mysql 存储过程求和_MySQL - 存储过程和函数

    MySQL - 存储过程和函数 创建和调用存储过程 -- 创建stu_group()存储过程,封装 分组查询总成绩,并按照总成绩升序排序的功能 -- 注意: DELIMITER 必须写在一行的最前面, ...

  4. concat mysql sql注入_Mysql中用concat函数执行SQL注入查询的方法

    Mysql数据库使用concat函数执行SQL注入查询 SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示 ...

  5. mysql 处理文件函数_mysql数据处理与函数

    大纲 列的别名 concat()函数 算术运算 字符处理函数 日期时间函数 数值处理函数 聚集函数 1.列的别名 就像人的外号一样,列有时候不太好理解或者列名太长,可以给它起别名 如何使用呢?  使用 ...

  6. mysql 调用方差函数_MYSQL基本常用函数

    MYSQL基本常用函数 一.字符的操作函数 (ps:mysql中的索引都是从1开始的.) 1.instr(param1,param2) 返回子串第一次出现的索引,若找不到则返回0. param1填写操 ...

  7. mysql中日期函数_mysql中日期函数ADDDATE()函数用法大全

    摘要: 下文讲述mysql数据库中日期函数ADDDATE方法简介说明,如下所示: ADDDATE函数简介说明 ADDDATE函数是DATE_ADD函数的同义词,具有同样的功能, 其作用为:为指定的日期 ...

  8. mysql的时间比对函数_MySQL 笔记 —— 时间函数、时间比较

    整理下MySQL 日期时间函数及用法(5.6.*版本) 一.日期(date)相关 1.CURDATE().CURRENT_DATE().CURRENT_DATE: 同义,返回当前日期,如:2017-1 ...

  9. mysql substring用法_Mysql字符串截取函数SUBSTRING的用法说明

    函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my ...

最新文章

  1. dataTable 表格组件刷新 问题记录
  2. Delphi从Internet下载文件
  3. Winform中使用NPOI实现Excel导入并赋值给DataTable
  4. 关于监听UITextField的问题
  5. 月收入两千,负债40万,怎么来处理?
  6. 犀牛keyshot插件_keyshot 对接 犀牛各版本插件集合
  7. python3使用matplotlib绘制风速风向玫瑰图
  8. 微信扫码支付 java版
  9. 马化腾的互联网之路:别人不是打不赢你,掌声越热烈就越危险
  10. mac vim映射esc_如何通过重新映射大写锁定来获取Mac的Esc键
  11. 游戏介绍——《逆转裁判》
  12. 六年工作经验总结分享,希望可以帮到你
  13. excel查找命令_快速查找Excel功能区命令
  14. 不限距离4g/5g信号远程遥控小车
  15. PYNQ入门(2)——启动系统及例程查看
  16. Jetson TX2 tensorflow安装+keras安装
  17. 智慧医院三维可视化决策系统平台(数字孪生)-解决方案开发案例
  18. 监狱逃离 51nod1299 最小割
  19. 坐标转换:墨卡托 经纬度
  20. Slik-Subversion+TortoiseSVN

热门文章

  1. 怎么用服务器网络中转,怎么假设中转服务器
  2. 无法停止通用卷设备的解决方法
  3. 计算机桌面闪烁,手把手教你电脑屏幕闪烁怎么办
  4. Android APP增量更新
  5. react兄弟组件之间的传值
  6. 头文件cstring、string、string.h的区别
  7. 图像识别应用:识别出做过标记的单元格
  8. 十一月六日作业(双十一广告)
  9. 兄弟连Linux运维学习笔记
  10. 大乐透号码生成器python_Python生成随机验证码,大乐透号码