龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

与MSSQL对比学习MYSQL的心得(六)--函数(3)

时间:2014-08-05 02:12来源:网络整理 作者:网络 点击:
分享到:
MYSQL SELECT EXTRACT(YEAR FROM '2013-2-3') 7、时间和秒钟转换的函数 TIME_TO_SEC(time)返回已转化为秒的time参数,转换公式为:小时*3600+分钟*60+秒 SELECT TIME_TO_SEC('23:2


 
MYSQL

SELECT EXTRACT(YEAR FROM '2013-2-3')

7、时间和秒钟转换的函数

TIME_TO_SEC(time)返回已转化为秒的time参数,转换公式为:小时*3600+分钟*60+秒

SELECT TIME_TO_SEC('23:22:00')


 
SEC_TO_TIME(second)函数可以将秒转换为小时、分钟和秒数的second参数值

SELECT SEC_TO_TIME('84120')

 

SEC_TO_TIME(second)函数和TIME_TO_SEC(time)函数互为反函数

8、计算日期和时间的函数

MYSQL里计算日期和时间的函数比较多

增加日期:DATE_ADD(date,interval  expr type),ADDDATE(date,interval  expr type)

减去日期:DATE_SUB(date,interval  expr type),SUBDATE(date,interval  expr type)

增加时间:ADD_TIME(date,expr)

减去时间:SUBTIME(date,expr)

时间差:DATEDIFF()

日期和时间格式化:

DATE_FORMAT(date,format)

TIME_FORMAT(time,format)

返回日期时间字符串的显示格式:GET_FORMAT(val_type,format_type)

相对来说,SQLSERVER在时间日期方面的计算就没有那么多函数了

基本上SQLSERVER利用下面两个函数来通杀日期时间计算的场景

SELECT DATEADD(),DATEDIFF()
条件判断函数

条件判断函数也称为流程控制函数,根据满足的条件的不同,执行相应的流程。

MYSQL中进行条件判断的函数有IF、IFNULL、CASE

虽然SQLSERVER里也有IF和CASE,不过MYSQL里的IF语句的语法跟SQLERVER有很大出入

 

1、IF(expr,v1,v2)函数

IF(expr,v1,v2)如果表达式expr是TRUE(expr<>0 and expr<>NULL),则IF()的返回值为v1;

否则返回值为v2。IF()的返回值为数字值或字符串值,具体情况视其所在语境而定

SELECT IF(1>2,2,3)

1>2的结果为FALSE,IF(1>2,2,3)返回第二个表达式的值3。

TIPS:如果v1或v2中只有一个明确是NULL,则IF()函数的结果类型为非NULL表达式的结果类型。

2、IFNULL(V1,V2)函数

IFNULL(V1,V2)假如v1不为NULL,则IFNULL(V1,V2)的返回值为v1;否则其返回值为v2。

IFNULL()的返回值是数字或是字符串,具体情况视语境而定

SELECT IFNULL(1,2),IFNULL(NULL,10)

IFNULL(1,2)虽然第二个值也不为空,但返回结果依然是第一个值;

IFNULL(NULL,10)第一个值为空,因此返回“10”

注意:IFNULL(V1,V2)函数跟SQLSERVER里的 SELECT NULLIF() 函数不一样

SQLSERVER里的NULLIF函数

需要两个参数,如果两个指定的表达式等价,则返回null

例子:NULLIF(a,b)

说明:如果a和b是相等的,那么返回NULL,如果不相等返回a

select NULLIF('eqeqweqwe','1') 结果是eqeqweqwe

select NULLIF(1,1) 结果是NULL

a和b的类型要一致

3、CASE函数

注意:一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。

如果用字符串语境中,则返回结果为字符串。如果用在数字语境中,则返回结果为十进制、实数值或整数值

这个数据类型在拼接SQL语句的时候特别容易忽略,有时候会在拼接SQL语句的时候,case 后面的表达式或者when后面的表达式不一致报错!

参考文章:http://support.microsoft.com/kb/969467/zh-cn

修补程序: 错误消息,当您运行查询时,SQL Server 2008年中使用 CASE 函数:"转换失败时转换为数据类型 < Type2 > < Type1 > 值 < 值 >"

在MSDN论坛也有一个相关的帖子,大概是因为拼接sql的时候case 后面的表达式值的数据类型和else后面的表达式值的数据类型不一致导致拼接sql失败

具体的帖子地址忘记了,也找不到,如果找到以后会补充上

系统信息函数

1、获取MYSQL版本号、连接数和数据库名的函数

VERSION()返回指示MYSQL服务器版本的字符串。这个字符串使用utf8字符集

SELECT VERSION()


 
2、CONNECTION_ID()返回MYSQL服务器当前连接的次数,每个连接都有各自唯一的ID

查看当前用户的连接数

SELECT CONNECTION_ID()

这里返回1,返回值根据登录的次数会有不同。

3、SHOW PROCESSLIST;

4、SHOW FULL PROCESSLIST;

processlist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态

帮助识别出有问题的查询语句等。

 

如果是root帐号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。showprocesslist只能列出当前100条

如果想全部列出,可以使用SHOW FULL PROCESSLIST命令

SHOW PROCESSLIST
SHOW FULL PROCESSLIST
show full processlist会看到连接使用的内存

show processlist

show full processlist

 各个列的含义

(1)id列,用户登录mysql时,系统分配的“connection_id”

(2)user列,显示当前用户。如果不是root,这个命令就只显示用户权限范围的sql语句

(3)host列,显示这个语句是从哪个ip的哪个端口上发的,可以用来跟踪出现问题语句的用户

(4)db列,显示这个进程目前连接的是哪个数据库

(5)command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect)

(6)time列,显示这个状态持续的时间,单位是秒

(7)state列,显示使用当前连接的sql语句的状态,很重要的列,后续会有所有状态的描述,state只是语句执行中的某一个状态。一个sql语句,

以查询为例

可能需要经过

copying to tmp table,

sorting result,

sending data

等状态才可以完成

(8)info列,显示这个sql语句,是判断问题语句的一个重要依据。

5、DATABASE()和SCHEMA()函数返回使用utf8字符集的默认(当前)数据库名

SELECT DATABASE(),SCHEMA()


可以看到,两个函数的作用相同

6、获取用户名的函数

USER()、CURRENT_USER()、CURRENT_USER、SYSTEM_USER()、SESSION_USER()

这几个函数返回当前被MYSQL服务器验证的用户名和主机名组合。这个值符合确定当前登录用户

精彩图集

赞助商链接