您的位置
主页 > 网站技术 > 数据库 > » 正文

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

来源: 锦尚中国 点击:


 
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后面的表达式不一致报错!

参考文章:

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

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

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

系统信息函数

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

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

SELECT VERSION()




首页  - 关于站长圈  - 广告服务  - 联系我们  - 关于站长圈  - 网站地图  - 版权声明