TIP
本文主要是介绍 Mysql-常用函数 。
- 概要
- 数学函数
- 字符串函数
- (1)CHAR_LENGTH(str)
- (2)CONCAT(s1,s2,...)
- (3)CONCAT_WS(x,s1,s2,...)
- (4)INSERT(s1,x,len,s2)
- (5)LOWER(str)和LCASE(str)、UPPER(str)和UCASE(str)
- (6)LEFT(s,n)、RIGHT(s,n)
- (7)LPAD(s1,len,s2)、RPAD(s1,len,s2)
- (8)LTRIM(s)、RTRIM(s)
- (9)TRIM(s)
- (10)TRIM(s1 FROM s)
- (11)REPEAT(s,n)
- (12)SPACE(n)
- (13)REPLACE(s,s1,s2)
- (14)STRCMP(s1,s2)
- (15)SUBSTRING(s,n,len)、MID(s,n,len)
- (16)LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1)
- (17)REVERSE(s)
- (18)ELT(N,str1,str2,str3,str4,...)
- 日期和时间函数
- (1)CURDATE()、CURRENT_DATE()
- (2)CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE()
- (3)UNIXTIMESTAMP()、UNIXTIMESTAMP(date)
- (4)FROM_UNIXTIME(date)
- (5)UTCDATE()和UTCTIME()
- (6)MONTH(date)和MONTHNAME(date)
- (7)DAYNAME(d)、DAYOFWEEK(d)、WEEKDAY(d)
- (8)WEEK(d)、WEEKOFYEAD(d)
- (9)DAYOFYEAR(d)、DAYOFMONTH(d)
- (10)YEAR(date)、QUARTER(date)、MINUTE(time)、SECOND(time)
- (11)EXTRACE(type FROM date)
- (12)TIMETOSEC(time)
- (13)SECTOTIME()
- (14)DATEADD(date,INTERVAL expr type)、ADDDATE(date,INTERVAL expr type)
- (15)DATE_SUB(date,INTERVAL expr type)、SUBDATE(date,INTERVAL expr type)
- (16)ADDTIME(date,expr)、SUBTIME(date,expr)
- 条件判断函数
- 系统信息函数
- (1)VERSION()
- (2)CONNECTION_ID()
- (3)USER()、CURRENTUSER()、SYSTEMUSER()、SESSION_USER()
- (4)CHARSET(str)
- (5)COLLATION()
- (1)PASSWORD(str)
- (2)MD5(str)
- (3)ENCODE(str, pswd_str)
- (4)DECODE(cryptstr,pswdstr)
- (1)FORMAT(x,n) 精度计算四舍五入
- (2)CONV(N,frombase,tobase)
- (3)INET_ATON(expr)
- (4)INET_NTOA(expr)
- (5)BENCHMARK(count,expr)
- (6)CONVERT(str USING charset)
- 【----------------------------】
- MySQL:if语句、if...else语句、case语句,使用方法解析!
- 【----------------------------】
- MySQL:日期函数、时间函数总结
- MySQL 获得当前日期时间 函数
- MySQL 日期转换函数、时间转换函数 date_format
- MySQL 日期时间计算函数
- MySQL 时区(timezone)转换函数
- 【----------------------------】
- MySQL 数据类型转换
- 参考文章
# 概要
MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。例如,字符串连接函数可以很方便的将多个字符串连接在一起。在这一讲中将讲解的内容包括:
- 数学函数
- 字符串函数
- 日期和时间函数
- 条件判断函数
- 系统信息函数
- 加密函数
- 格式化函数
MySQL提供了众多功能强大、方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求。本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时查看。
# 数学函数
# (1)ABS(x)
返回x的绝对值
# (2)PI()
返回圆周率π,默认显示6位小数
# (3)SQRT(x)
返回非负数的x的二次方根
# (4)MOD(x,y)
返回x被y除后的余数
# (5)CEIL(x)、CEILING(x)
返回不小于x的最小整数
# (6)FLOOR(x)
返回不大于x的最大整数
# (7)ROUND(x)、ROUND(x,y) 精度计算
前者返回最接近于x的整数,即对x进行四舍五入;后者返回最接近x的数,其值保留到小数点后面y位,若y为负值,则将保留到x到小数点左边y位
# (8)SIGN(x)
返回参数x的符号,-1表示负数,0表示0,1表示正数
# (9)POW(x,y)和、POWER(x,y)
返回x的y次乘方的值
# (10)EXP(x)
返回e的x乘方后的值
# (11)LOG(x)
返回x的自然对数,x相对于基数e的对数
# (12)LOG10(x)
返回x的基数为10的对数
# (13)RADIANS(x)
返回x由角度转化为弧度的值
# (14)DEGREES(x)
返回x由弧度转化为角度的值
# (15)SIN(x)、ASIN(x)
前者返回x的正弦,其中x为给定的弧度值;后者返回x的反正弦值,x为正弦
# (16)COS(x)、ACOS(x)
前者返回x的余弦,其中x为给定的弧度值;后者返回x的反余弦值,x为余弦
# (17)TAN(x)、ATAN(x)
前者返回x的正切,其中x为给定的弧度值;后者返回x的反正切值,x为正切
# (18)COT(x)
返回给定弧度值x的余切
# 字符串函数
# (1)CHAR_LENGTH(str)
计算字符串字符个数
# (2)CONCAT(s1,s2,...)
返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个为NULL则返回值为NULL
# (3)CONCAT_WS(x,s1,s2,...)
返回多个字符串拼接之后的字符串,每个字符串之间有一个x
# (4)INSERT(s1,x,len,s2)
返回字符串s1,其子字符串起始于位置x,被字符串s2取代len个字符
# (5)LOWER(str)和LCASE(str)、UPPER(str)和UCASE(str)
前两者将str中的字母全部转换成小写,后两者将字符串中的字母全部转换成大写
# (6)LEFT(s,n)、RIGHT(s,n)
前者返回字符串s从最左边开始的n个字符,后者返回字符串s从最右边开始的n个字符
# (7)LPAD(s1,len,s2)、RPAD(s1,len,s2)
前者返回s1,其左边由字符串s2填补到len字符长度,假如s1的长度大于len,则返回值被缩短至len字符;前者返回s1,其右边由字符串s2填补到len字符长度,假如s1的长度大于len,则返回值被缩短至len字符
# (8)LTRIM(s)、RTRIM(s)
前者返回字符串s,其左边所有空格被删除;后者返回字符串s,其右边所有空格被删除
# (9)TRIM(s)
返回字符串s删除了两边空格之后的字符串
# (10)TRIM(s1 FROM s)
删除字符串s两端所有子字符串s1,未指定s1的情况下则默认删除空格
# (11)REPEAT(s,n)
返回一个由重复字符串s组成的字符串,字符串s的数目等于n
# (12)SPACE(n)
返回一个由n个空格组成的字符串
# (13)REPLACE(s,s1,s2)
返回一个字符串,用字符串s2替代字符串s中所有的字符串s1
# (14)STRCMP(s1,s2)
若s1和s2中所有的字符串都相同,则返回0;根据当前分类次序,第一个参数小于第二个则返回-1,其他情况返回1
# (15)SUBSTRING(s,n,len)、MID(s,n,len)
两个函数作用相同,从字符串s中返回一个第n个字符开始、长度为len的字符串
# (16)LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1)
三个函数作用相同,返回子字符串str1在字符串str中的开始位置(从第几个字符开始)
# (17)REVERSE(s)
将字符串s反转
# (18)ELT(N,str1,str2,str3,str4,...)
返回第N个字符串
# 日期和时间函数
# (1)CURDATE()、CURRENT_DATE()
将当前日期按照"YYYY-MM-DD"或者"YYYYMMDD"格式的值返回,具体格式根据函数用在字符串或是数字语境中而定
# (2)CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE()
这四个函数作用相同,返回当前日期和时间值,格式为"YYYY_MM-DD HH:MM:SS"或"YYYYMMDDHHMMSS",具体格式根据函数用在字符串或数字语境中而定
# (3)UNIX_TIMESTAMP()、UNIX_TIMESTAMP(date)
前者返回一个格林尼治标准时间1970-01-01 00:00:00到现在的秒数,后者返回一个格林尼治标准时间1970-01-01 00:00:00到指定时间的秒数
# (4)FROM_UNIXTIME(date)
和UNIX_TIMESTAMP互为反函数,把UNIX时间戳转换为普通格式的时间
# (5)UTC_DATE()和UTC_TIME()
前者返回当前UTC(世界标准时间)日期值,其格式为"YYYY-MM-DD"或"YYYYMMDD",后者返回当前UTC时间值,其格式为"YYYY-MM-DD"或"YYYYMMDD"。具体使用哪种取决于函数用在字符串还是数字语境中
# (6)MONTH(date)和MONTHNAME(date)
前者返回指定日期中的月份,后者返回指定日期中的月份的名称
# (7)DAYNAME(d)、DAYOFWEEK(d)、WEEKDAY(d)
DAYNAME(d)返回d对应的工作日的英文名称,如Sunday、Monday等;DAYOFWEEK(d)返回的对应一周中的索引,1表示周日、2表示周一;WEEKDAY(d)表示d对应的工作日索引,0表示周一,1表示周二
# (8)WEEK(d)、WEEKOFYEAD(d)
前者计算日期d是一年中的第几周,后者计算某一天位于一年中的第几周
# (9)DAYOFYEAR(d)、DAYOFMONTH(d)
前者返回d是一年中的第几天,后者返回d是一月中的第几天
# (10)YEAR(date)、QUARTER(date)、MINUTE(time)、SECOND(time)
YEAR(date)返回指定日期对应的年份,范围是1970~2069;QUARTER(date)返回date对应一年中的季度,范围是1~4;MINUTE(time)返回time对应的分钟数,范围是0~59;SECOND(time)返回制定时间的秒值
# (11)EXTRACE(type FROM date)
从日期中提取一部分,type可以是YEAR、YEAR_MONTH、DAY_HOUR、DAY_MICROSECOND、DAY_MINUTE、DAY_SECOND
# (12)TIME_TO_SEC(time)
返回以转换为秒的time参数,转换公式为"3600小时 + 60分钟 + 秒"
# (13)SEC_TO_TIME()
和TIME_TO_SEC(time)互为反函数,将秒值转换为时间格式
# (14)DATE_ADD(date,INTERVAL expr type)、ADD_DATE(date,INTERVAL expr type)
返回将起始时间加上expr type之后的时间,比如DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 SECOND)表示的就是把第一个时间加1秒
# (15)DATE_SUB(date,INTERVAL expr type)、SUBDATE(date,INTERVAL expr type)
返回将起始时间减去expr type之后的时间
# (16)ADDTIME(date,expr)、SUBTIME(date,expr)
前者进行date的时间加操作,后者进行date的时间减操作
# 条件判断函数
# (1)IF(expr,v1,v2)
如果expr是TRUE则返回v1,否则返回v2
# (2)IFNULL(v1,v2)
如果v1不为NULL,则返回v1,否则返回v2
# (3)CASE expr WHEN v1 THEN r1 [WHEN v2 THEN v2] [ELSE rn] END
如果expr等于某个vn,则返回对应位置THEN后面的结果,如果与所有值都不想等,则返回ELSE后面的rn
# 系统信息函数
# (1)VERSION()
查看MySQL版本号
# (2)CONNECTION_ID()
查看当前用户的连接数
# (3)USER()、CURRENT_USER()、SYSTEM_USER()、SESSION_USER()
查看当前被MySQL服务器验证的用户名和主机的组合,一般这几个函数的返回值是相同的
# (4)CHARSET(str)
查看字符串str使用的字符集
# (5)COLLATION()
查看字符串排列方式
加密函数
# (1)PASSWORD(str)
从原明文密码str计算并返回加密后的字符串密码,注意这个函数的加密是单向的(不可逆),因此不应将它应用在个人的应用程序中而应该只在MySQL服务器的鉴定系统中使用
# (2)MD5(str)
为字符串算出一个MD5 128比特校验和,改值以32位十六进制数字的二进制字符串形式返回
# (3)ENCODE(str, pswd_str)
使用pswd_str作为密码,加密str
# (4)DECODE(crypt_str,pswd_str)
使用pswd_str作为密码,解密加密字符串crypt_str,crypt_str是由ENCODE函数返回的字符串
其他函数
# (1)FORMAT(x,n) 精度计算四舍五入
将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串形式返回
# (2)CONV(N,from_base,to_base)
不同进制数之间的转换,返回值为数值N的字符串表示,由from_base进制转换为to_base进制
# (3)INET_ATON(expr)
给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数,地址可以使4或8比特
# (4)INET_NTOA(expr)
给定一个数字网络地址(4或8比特),返回作为字符串的该地址的点地址表示
# (5)BENCHMARK(count,expr)
重复执行count次表达式expr,它可以用于计算MySQL处理表达式的速度,结果值通常是0(0只是表示很快,并不是没有速度)。另一个作用是用它在MySQL客户端内部报告语句执行的时间
# (6)CONVERT(str USING charset)
使用字符集charset表示字符串str
# 【----------------------------】
# MySQL:if语句、if...else语句、case语句,使用方法解析!
if语句做为表达式使用,语法格式如下:
IF(expr1,expr2,expr3)
说明:
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
例子:
select *,if(age=1,"男","女") as ages from user;
当然如果作为表达式的话,if也可以用CASE when来实现的:
/* 下面这个将输出:男 */
SELECT
CASE 1
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END
as ages
/* 下面这个将输出:女 */
SELECT
CASE 2
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END
as ages
/* 下面这个将输出:未知 */
SELECT
CASE 3
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END
as ages
/* 当然还有一种写法 输出:未知 */
SELECT
CASE
WHEN 3=1 THEN '男'
WHEN 3=2 THEN '女'
ELSE '未知'
END
as ages
SELECT
CASE
WHEN 3=1 THEN '男'
WHEN 3=2 THEN '女'
WHEN (3=4 || 3!=null) THEN '测试'
ELSE '未知'
END
as ages
从上面的例子我们可以看出得很明白了,case后面的值=when后台的值,然后就会输出when后面跟的then后的值。如果都不等行的话,就输出else后的值。
IF...ELSE...做为流程控制语句使用,语法格式如下:
IF search_condition THEN
statement_list
[ELSEIF search_condition THEN]
statement_list ...
[ELSE
statement_list]
END IF
说明:
与PHP中的IF语句类似
当IF中条件search_condition成立时,执行THEN后的statement_list语句、
否则判断ELSEIF中的条件成立时,执行其后的statement_list语句、
否则继续判断其他分支。
当所有分支的条件均不成立时,执行ELSE分支。
search_condition是一个条件表达式,可以由“=、<、<=、>、>=、!=”等条件运算符组成,并且可以使用AND、OR、NOT对多个表达式进行组合。
例子:
建立一个存储过程,该存储过程通过学生学号(student_no)和课程编号(course_no)查询其成绩(grade),
返回成绩和成绩的等级,成绩大于90分的为A级,小于90分大于等于80分的为B级,小于80分大于等于70分的为C级,依次到E级
create procedure dbname.proc_getGrade
(stu_no varchar(20),cour_no varchar(10))
BEGIN
declare stu_grade float;
select grade into stu_grade from grade where student_no=stu_no and course_no=cour_no;
if stu_grade>=90 then
select stu_grade,'A';
elseif stu_grade<90 and stu_grade>=80 then
select stu_grade,'B';
elseif stu_grade<80 and stu_grade>=70 then
select stu_grade,'C';
elseif stu_grade70 and stu_grade>=60 then
select stu_grade,'D';
else
select stu_grade,'E';
end if;
END
注意:IF作为一条语句,在END IF后需要加上分号“;”以表示语句结束,其他语句如CASE、LOOP等也是相同的。
# 【----------------------------】
# MySQL:日期函数、时间函数总结
# MySQL 获得当前日期时间 函数
# 获得当前日期+时间(date + time)函数:now()
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2008-08-08 22:20:46 |
+---------------------+
# 获得当前日期+时间(date + time)函数:sysdate()
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:
mysql> select now(), sleep(3), now();
+---------------------+----------+---------------------+
| now() | sleep(3) | now() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |
+---------------------+----------+---------------------+
sysdate() 日期时间函数,一般情况下很少用到。
# MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()
mysql> select current_timestamp, current_timestamp();
+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+
# MySQL 日期转换函数、时间转换函数 date_format
# MySQL Date/Time to Str(日期/时间转换为字符串)
函数:date_format(date,format), time_format(time,format)
mysql> select date_format('2008-08-08 22:23:01', '%Y-%m-%d %H:%i:%S');
mysql> select date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s');
+----------------------------------------------------+
| date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') |
+----------------------------------------------------+
| 20080808222301 |
+----------------------------------------------------+
# MySQL 日期、时间转换函数:date_format(date,format), time_format(time,format)
能够把一个日期/时间转换成各种各样的字符串格式。它是 str_to_date(str,format) 函数的 一个逆转换。
MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)
select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30
可以看到,str_to_date(str,format) 转换函数,可以把一些杂乱无章的字符串转换为日期格式。另外,它也可以转换为时间。“format” 可以参看 MySQL 手册。
# MySQL (日期、天数)转换函数:to_days(date), from_days(days)
select to_days('0000-00-00'); -- 0
select to_days('2008-08-08'); -- 733627
# MySQL (时间、秒)转换函数:time_to_sec(time), sec_to_time(seconds)
select time_to_sec('01:00:05'); -- 3605
select sec_to_time(3605); -- '01:00:05'
# MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'
# MySQL (Unix 时间戳、日期)转换函数
unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)
下面是示例:
select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800
select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'
select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'
# MySQL 日期时间计算函数
# MySQL 为日期增加一个时间间隔:date_add()
set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- sub 1 day
# MySQL adddate(), addtime()函数,
可以用 date_add() 来替代。下面是 date_add() 实现 addtime() 功能示例:
mysql> set @dt = '2008-08-09 12:12:33';
mysql>
mysql> select date_add(@dt, interval '01:15:30' hour_second);
+------------------------------------------------+
| date_add(@dt, interval '01:15:30' hour_second) |
+------------------------------------------------+
| 2008-08-09 13:28:03 |
+------------------------------------------------+
mysql> select date_add(@dt, interval '1 01:15:30' day_second);
+-------------------------------------------------+
| date_add(@dt, interval '1 01:15:30' day_second) |
+-------------------------------------------------+
| 2008-08-10 13:28:03 |
+-------------------------------------------------+
# MySQL 为日期减去一个时间间隔:date_sub()
mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
+----------------------------------------------------------------+
| date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) |
+----------------------------------------------------------------+
| 1997-12-30 22:58:59 |
+----------------------------------------------------------------+
MySQL date_sub() 日期时间函数 和 date_add() 用法一致,不再赘述。
# MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。
select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7
MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。
select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
select timediff('08:08:08', '00:00:00'); -- 08:08:08
注意:timediff(time1,time2) 函数的两个参数类型必须相同。
# MySQL 时间戳(timestamp)转换、增、减函数:
timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --
请看示例部分:
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01
select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00
MySQL timestampadd() 函数类似于 date_add()。
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12
select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7
MySQL timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(date)之间相差的天数。
# MySQL 时区(timezone)转换函数
convert_tz(dt,from_tz,to_tz)
select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00
时区转换也可以通过 date_add, date_sub, timestampadd 来实现。
select date_add('2008-08-08 12:00:00', interval -8 hour); -- 2008-08-08 04:00:00
select date_sub('2008-08-08 12:00:00', interval 8 hour); -- 2008-08-08 04:00:00
select timestampadd(hour, -8, '2008-08-08 12:00:00'); -- 2008-08-08 04:00:00
# 【----------------------------】
# MySQL 数据类型转换
Mysql中提供了两个内置函数提供我们使用分别为:CAST和CONVERT,Mysql 的CAST()和CONVERT() 函数可用来转换或者获取一个我们需要的类型。两者具体的语法如下:
# (1) cast(value as type);
# (2) convert(value,type);
# 语法
说明 value 为要转换原数据类型的值,type目的类型.但可以转换的类型是有限制的。类型可以是以下任何一个:
- 二进制,同带binary前缀的效果 : BINARY
- 字符型,可带参数 : CHAR()
- 日期 : DATE
- 时间: TIME
- 日期时间型 : DATETIME
- 浮点数 : DECIMAL
- 整数 : SIGNED
- 无符号整数 : UNSIGNED
样例: select cast(1.00 as SIGNED) from dual; select convert(1.00,SIGNED) from dual;
# 参考文章
- https://www.cnblogs.com/panchanggui/p/10652322.html
- https://www.cnblogs.com/ggjucheng/p/3352280.html
- https://www.cnblogs.com/northeastTycoon/p/5505523.html