欢迎光临散文网 会员登陆 & 注册

mysql神功 2.3 数据类型的细分之日期和时间类型

2023-03-22 10:40 作者:孙兴华zz  | 我要投稿

一、日期类型

图2-35

1、YEAR

图2-36  设计表视图

当你选择了YEAR类型时,超出范围的录入会提示:哪个列,哪行出现问题。如图2-37

我们输入: '1901'  或  1901  保存后的结果都是 1901

但是我们输入 2156 时就会告诉我们,年份列第5行的值超过取值范围

图2-37

正常人输入就是4位年,范围1901~2155就可以避免错误。但是有人耍小聪明,那就麻烦了。

特殊情况1:输入字符串

'0' ~ '69'   返回:2000~2069

图2-38


'0' 、'00'、'000'  结果相同,返回 2000    但是 '0000'  返回 0000

                                                      注:0000不是年,公元中也没有0年。

'1'、'01'、'001''0001'    结果相同,返回 2001

......

'69''069''0069'  结果相同,返回 2069


'70' ~ '99'   返回:1970~1999

图2-39

'70''070''0070'  结果相同,返回 1970

'71''071''0071'  结果相同,返回 1971

......

'99''099''0099'  结果相同,返回 1999


有些小伙伴会问,你这都是2位数,那输入3位数呢?

因为你输入3位数无法保存,所以凡是不让你做的事情,我就可以一带而过,

让你做又让你错的事情,我就要提醒你尽量避免。

就好比,你说你要暗杀塞罗奥特曼,我可能当你有病。但是把塞罗奥特曼换成张三,我就要劝你了。

图2-40

特殊情况2:输入数字

输入数字 0 : 会返回 0000    同上,0000不是年,公元里面没有0年

输入数字 1~69 或  01~69 或  001~069    会返回:2001~2069

输入数字 70~99  或  070~099  会返回:1970~1999


以上,我废了这么多话,目的是什么呢?

答:输入时请使用1901~2155这样的标准四位数。


如果使用1901年以前或2155年以后的年份如何处理?

答:可以考虑使用整数型,因为年份可能会用于计算。这里优先推荐 SMALLINT类型,它占用2字节,范围 0~65535(无符号)或 -32768~32767(有符号)足够你用了。


2、DATE

图2-42

在YEAR类型我建议大家输入1901~2155这样的标准年份格式

在DATE类型中,我仍然推荐大家输入标准年份格式,如图2-43

标准格式:四位年、两位月、两位日

图2-43

有些书籍上介绍,可以按 'YYYY-MM-DD' 或 'YYYYMMDD' 或  'YY-MM-DD' 或 'YYMMDD' 

但是我在Navicat for MySQL 12.0.29版中直接使用测试不通过,如下四幅图所示

声明,并不是人家书讲的不对,只是Navicat for MySQL 12.0.29不能直接使用而已。如下图,我输入密码进入MySQL服务器,使用“小哈”这个库,对测试表1添加我的生日:'2000-10-07' 是可以成功的。

当我们在Navicat for MySQL 12.0.29 使用代码插入行时也是OK的。

后面要讲的时间类型函数都是一样的情况,不再重复。

还有一种方法,就是年写成两位 YY-MM-DD  或 YYMMDD 

这里要注意,YY和我们上面讲的YEAR函数一样,

00~69 是 2000~2069  ,70~99 是 1970~1999

所以再次提醒大家,按标准的方式输入   YYYY-MM-DD 或 YYYYMMDD  并且注意取值范围

如果涉及公元1000年1月1日以前的日期,建议使用文本字符串类型,下节课会讲。


二、时间类型

图2-44

小数秒的空间是动态的,如果你不用,它就是0字节。1~2位小数秒占1字节,3~4位小数秒占2字节,5~6位小数秒占3字节。图2-44 中括号代表可选参数,输入时应该这样写,如图2-45。因为我工作中用不到,所以后面关于这个知识将不再介绍。

图2-45

可能你会发现,你写完的小数秒,保存无效,那是因为你的表设计里的长度为0。可以将长度改成你需要的位置1~6,如图2-46

图2-46

如果你是通过代码完成创建表,那这里你要注意TIME后面加小括号写上长度。

因为现在还没学代码,防止你们手里有人看书在这里蒙圈,提示一下。

支持小数秒的三个类型在创建表时的方法相同,只是改一下类型名称,后面将不再重复。

1、TIME

图2-47

TIME类型为什么小时可以是-838~838?

答:为了方便取间隔时间。比如张三从周一的某个时间点开始打游戏,一直没睡觉,周四住院了,从他打游戏到身体支撑不住共计多少小时、多少分钟、多少秒?


TIME类型一共有三种写法:

(1)HH:MM:SS     

图2-48

如果写成 05:2:1  会自动修证成  05:02:01

注意事项:小时的范围,但是分钟和秒都是60进制,最高只能写到59

当分钟和秒大于59时,就会报错

(2)HHMMSS    省略冒号,我最常用的方法,但是注意别偷懒

图2-49

这样写是可以的,但是我建议你将小时、分钟、秒写全,个位数前面补一个0

例如:18:05:03    请写成 180503

如果你写成1853,MySQL会识别成 18:53

图2-50

我个人的建议,你不要去研究错了以后会有什么后果,要保证不出错。

(3) D  HH:MM:SS 

这里的D代表几天,1天是24小时,2天48小时,用得到的小时+后面的时间中的小时

但是要注意上限和下限

图2-51

超出小时上限和下限就会报错

图2-52

友情提示:使用字符串方式可以通过代码完成,不可以直接在这里输入,同上面的DATE函数


2、DATETIME

(1)时间范围:1000-01-01 00:00:00[.000000]~9999-12-31 23:59:59[.999999]

(2)两种推荐的输入方法

另外,在可视化界面输入现在时间,只需要鼠标点击就可以了,如果使用代码那值为 Now() 这些函数在后续课程中会逐一讲解。

友情提示:使用字符串方式可以通过代码完成,不可以直接在这里输入,同上面的DATE函数

3、TIMESTAMP

取值范围在图2-44中已经显示,不再重复。

这里要提一下,什么时候用TIMESTAMP(时间戳) ? 什么时候用 DATETIME(日期时间)?

答:如果您正在跨时区使用应用程序,并且需要日期时间来反映结果,请使用TIMESTAMP时间戳。如果无论时区如何都需要一致性结果,请使用datetime(日期时间)。

它会在存储前转换为UTC(世界统一时间),然后在检索时转换回当前时区设置。因此,如果时区设置在存储和检索之间发生更改,您将得到不同的值;但是它们却对应于相同的UTC日期时间。

从我孙兴华的英文口语你们就应该知道,我不可能在跨国企业工作,所以这个我用不到:)

mysql神功 2.3 数据类型的细分之日期和时间类型的评论 (共 条)

分享到微博请遵守国家法律