mysql从头学一 1.0常用函数

字符串函数

函数

功能

CANCAT(S1,S2,…Sn)

连接 S1,S2,…Sn 为一个字符串

INSERT(str,x,y,instr)

将字符串 str 从第 x 位置开始,y 个字符长的子串替换为字符串 instr

LOWER(str)

将字符串 str 中所有字符变为小写

UPPER(str)

将字符串 str 中所有字符变为大写

LEFT(str ,x)

返回字符串 str 最左边的 x 个字符

RIGHT(str,x)

返回字符串 str 最右边的 x 个字符

LPAD(str,n ,pad)

用字符串 pad 对 str 最左边进行填充,直到长度为 n 个字符长度

RPAD(str,n,pad)

用字符串 pad 对 str 最右边进行填充,直到长度为 n 个字符长度

LTRIM(str)

去掉字符串 str 左侧的空格

RTRIM(str)

去掉字符串 str 行尾的空格

REPEAT(str,x)

返回 str 重复 x 次的结果

REPLACE(str,a,b)

用字符串 b 替换字符串 str 中所有出现的字符串 a

STRCMP(s1,s2)

比较字符串 s1 和 s2

TRIM(str)

去掉字符串行尾和行头的空格

SUBSTRING(str,x,y)

返回从字符串 str x 位置起 y 个字符长度的字串

 

5.2 数值函数

MySQL 中另外一类很重要的函数就是数值函数,这些函数能处理很多数值方面的运算。可以想象,如果没有这些函数的支持,用户在编写有关数值运算方面的代码时将会困难重重,举个例子,如果没有 ABS 函数的话,如果要取一个数值的绝对值,就需要进行好多次判断才能返回这个值,而数字函数能够大大提高用户的工作效率。表 5-2 中列出了在 MySQL 中会经常使用的数值函数。

 表 5-2                                        MySQL 中的常用数值函数

函数

功能

ABS(x)

返回 x 的绝对值

CEIL(x)

返回大于x的最大整数值

FLOOR(x)

返回小于 x 的最大整数值

MOD(x,y)

返回 x/y 的模

RAND()

返回 0 到 1 内的随机值

ROUND(x,y)

返回参数 x 的四舍五入的有 y 位小数的值

TRUNCATE(x,y)

返回数字 x 截断为 y 位小数的结果

 

 

5.3 日期和时间函数

有时我们可能会遇到这样的需求:当前时间是多少、下个月的今天是星期几、统计截止到当前日期前 3 天的收入总和等。这些需求就需要日期和时间函数来实现,表 5-3 列出了 MySQL 中支持的一些常用日期和时间函数。

表 5-3                                               MySQL 中的常用日期时间函数

函数

功能

CURDATE()

返回当前日期

CURTIME()

返回当前时间

NOW()

返回当前的日期和时间

UNIX_TIMESTAMP(date)

返回日期 date 的 UNIX 时间戳

FROM_UNIXTIME

返回 UNIX 时间戳的日期值

WEEK(date)

返回日期 date 为一年中的第几周

YEAR(date)

返回日期 date 的年份

HOUR(time)

返回 time 的小时值

MINUTE(time)

返回 time 的分钟值

MONTHNAME(date)

返回 date 的月份名

DATE_FORMAT(date,fmt) 

返回按字符串 fmt 格式化日期 date 值

DATE_ADD(date,INTERVAL expr type)

返回一个日期或时间值加上一个时间间隔的时间值

DATEDIFF(expr,expr2)

返回起始时间 expr 和结束时间 expr2 之间的天数

 

下面结合一些实例来逐个讲解每个函数的使用方法。

  1. CURDATE()函数:返回当前日期,只包含年月日。

mysql> select CURDATE();

+------------+

| CURDATE()  |

+------------+

| 2007-07-11 |

+------------+

1 row in set (0.03 sec)

 

  1. DATE_FORMAT(date,fmt)函数:按字符串 fmt 格式化日期 date 值,此函数能够按指定的格式显示日期,可以用到的格式符如表 5-4 所示。表 5-4     MySQL 中的日期时间格式

格式符

格式说明

%S,%s 

两位数字形式的秒(00,01,...,59)

%i 

两位数字形式的分(00,01,...,59)

%H

两位数字形式的小时,24 小时(00,01,...,23)

%h,%I 

两位数字形式的小时,12 小时(01,02,...,12)

%k 

数字形式的小时,24 小时(0,1,...,23)

%l

数字形式的小时,12 小时(1,2,...,12)

%T 

24 小时的时间形式(hh:mm:ss)

%r

12 小时的时间形式(hh:mm:ssAM 或 hh:mm:ssPM)

%p 

AM 或 PM

%W 

一周中每一天的名称(Sunday,Monday,...,Saturday)

%a

一周中每一天名称的缩写(Sun,Mon,...,Sat)

%d

两位数字表示月中的天数(00,01,...,31)

%e

数字形式表示月中的天数(1,2,...,31)

%D 

英文后缀表示月中的天数(1st,2nd,3rd,...)

%w

以数字形式表示周中的天数(0=Sunday,1=Monday,...,6=Saturday)

%j

以3位数字表示年中的天数(001,002,...,366)

%U

周(0,1,52),其中 Sunday 为周中的第一天

%u

周(0,1,52),其中 Monday 为周中的第一天

%M 

月名(January,February,...,December)

%b

缩写的月名(January,February,...,December)

%m

两位数字表示的月份(01,02,...,12)

%c

数字表示的月份(1,2,...,12)

%Y

4位数字表示的年份

%y

两位数字表示的年份

%%

直接值“%”

下面的例子将当前时间显示为“月,日,年”格式:

mysql> select DATE_FORMAT(now(),'%M,%D,%Y');

+-------------------------------+

| DATE_FORMAT(now(),'%M,%D,%Y') |

+-------------------------------+

| July,11th,2007                |

+-------------------------------+

1 row in set (0.00 sec)

  1. DATE_ADD(date,INTERVAL expr type)函数:返回与所给日期 date 相差 INTERVAL 时间段的日期。

其中 INTERVAL 是间隔类型关键字,expr 是一个表达式,这个表达式对应后面的类型,type 是间隔类型,MySQL 提供了 13 种间隔类型,如表 5-5 所示。

表 5-5                                               MySQL 中的日期间隔类型

表达式类型

描述

格式

HOUR

小时

hh

MINUTE

mm

SECOND

ss

YEAR

YY

MONTH

MM

DAY

DD

YEAR_MONTH

年和月

YY-MM

DAY_HOUR

日和小时

DD hh

DAY_MINUTE

日和分钟

DD hh:mm

DAY_ SECOND

日和秒

DD hh:mm:ss

HOUR_MINUTE

小时和分

hh:mm

HOUR_SECOND

小时和秒

hh:ss

MINUTE_SECOND

分钟和秒

mm:ss

来看一个具体的例子,在这个例子中第 1 列返回了当前日期时间,第 2 列返回距离当前日期 31 天后的日期时间,第 3 列返回距离当前日期一年两个月后的日期时间。

mysql> select now() current,date_add(now(),INTERVAL  31 day) after31days, date_add(now(),INTERVAL  '1_2' year_month) after_oneyear_twomonth;

+---------------------+---------------------+------------------------+

| current             | after31days         | after_oneyear_twomonth |

+---------------------+---------------------+------------------------+

| 2007-09-03 11:30:48 | 2007-10-04 11:30:48 | 2008-11-03 11:30:48    |

+---------------------+---------------------+------------------------+

1 row in set (0.01 sec)

同样也可以用负数让它返回之前的某个日期时间,如下第 1 列返回了当前日期时间,第 2 列返回距离当前日期 31 天前的日期时间,第 3 列返回距离当前日期一年两个月前的日期时间。

mysql> select now() current,date_add(now(),INTERVAL  -31 day) after31days,date_a dd(now(),INTERVAL  '-1_-2' year_month) after_oneyear_twomonth;

+---------------------+---------------------+------------------------+

| current             | after31days         | after_oneyear_twomonth |

+---------------------+---------------------+------------------------+

| 2007-09-03 11:36:35 | 2007-08-03 11:36:35 | 2006-07-03 11:36:35    |

+---------------------+---------------------+------------------------+ 1 row in set (0.00 sec)

 

l    DATEDIFF(date1,date2)函数:用来计算两个日期之间相差的天数。下面的例子计算出当前距离 2008 年 8 月 8 日的奥运会开幕式还有多少天:

mysql> select DATEDIFF('2008-08-08',now());

+------------------------------+

| DATEDIFF('2008-08-08',now()) |

+------------------------------+

|                          328 | 

+------------------------------+ 1 row in set (0.01 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值