首页 > 代码库 > MySQL cookbook读书笔记第六章

MySQL cookbook读书笔记第六章

1,修改MySQL中的日期的格式

在显示一个日期值时,如果没有特别指定,MySQL按照ISO格式显示日期即(CCYY-MM0DD)。如果不希望按照MySQL的默认格式输出时间和日期值,可以使用date_format()或者time_format()函数按照用户期望的格式重写日期或者时间值

image

date_format(),time_format()和str_to_date()三个函数都接受格式化串作为参数:

imageimage

image

image

2,设置客户端时区

如果客户端和服务器处在不同的时区,那么客户端在服务器上保存timestamp类型值时,实际保存的结果不是正确的utc时间。

解决方法:当客户端连接到服务器时,通过设置系统变量time_zone来改变客户端时区.

假定服务器和客户端是同一时区:

image

客户端查询的值与数据库中值相同,但是如果与服务器不在同一时区就会错误,我们更改session time_zone=’+04:00’那么查询之后相应地时间也会变化

image

3,获取当前日期或者时间

可以使用curdate(),curtime()或者now()函数来获得当前的日期和时间,使用utc_date,utc_time或者utc_timestamp()函数获得当前的utc日期和时间

使用timestamp来跟踪行修改时间:

首先创建一个包含timestamp类型列的表tsdemo1:

image

查看此时的tsdemo1的属性:

image

此时如果想tsdemo1表中插入之,ts列会记录插入的时间

image

更新操作,同样也会记录更新时的时间(更新为原来值时,时间不做更新):

image

如果只希望timestamp列自动初始化为行插入的日期和时间,不希望以后发生变化,那么可以使timestamp列举有

auto-initialize属性,但没有auto-update属性

image

此时,表的属性:

image

没有tsdemo1中的on update current_timestamp

update后,timestamp不做更新:

image

4,从日期或者时间值中分解出个部分值

a,使用特定函数从时间或者日期中取出一个特定部分,例如month()函数,minute()函数

b,使用格式化函数date_format()或者time_format()和一个特定的格式化串来得到一个日期或者时间值中分解出需要的部分

c,将一个时间或者日期当作一个字符串,然后使用left()或者mid()函数从其中得到所需要的部分。

image

image

extract()用于分解日期或者时间值的函数

image

使用格式化函数分解日期或者时间值:

image

image

好处:按照用户指定的格式来显示分解得到的结果

使用字符串分解时间或者日期值:

image

5,计算两个日期或时间之间间隔

使用时间差函数:

image

image

计算间隔,并将间隔分为时、分、秒显示:

image

还可以使用timestampdiff(unit,val1,val2):

image

使用基本时间单位来计算时间间隔:

image

6,将一个日期和时间切换时区

convert-tz()函数接受三个参数:一个date-and-time值,两个时区指示器。

image

因为我的mysql数据库中没有支持时区名的时区表,我尝试安装时区表不知道为什么还是NULL,使用utc是ok的

找到了出错的原因是我登录mysql时指定了登录的表为cookbook,而时区表是在mysql目录下的,这里不成功是正常的

image