日常提交

This commit is contained in:
wu xiangkai
2022-09-26 14:24:44 +08:00
parent 157744bda1
commit 10a1f54236

View File

@@ -73,3 +73,42 @@ DECIMAL和NUMERIC用于存储高精度的数值类型当保存数字的精度
# 其返回值为true
select b'011' = 3;
```
## mysql日期和时间类型
### 日期和时间类型语法
对于time、datetime、timestamp类型mysql允许second具有小数部分最高精度到小数点后6位微秒
> ***time、datetime、timestamp定义小数部分格式如下***
> ***type_name(fsp)***
> - type_name为date、datetime、timestamp中的一个
> - fsp为second的小数部分精度
```sql
CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
```
对于fsp其必须位于0~6的范围内0代表其没有小数部分。若fsp省略则默认情况下fsp为0.
### date
支持的日期是'1000-01-01'到'9999-12-31'。mysql通过'YYYY-MM-DD'的格式来显示date数据但是对于date类型的赋值既可以通过字符串类型也可以通过数字类型。
### datetimefsp
***datetime***类型是***date***和***time***类型的组合。datetime类型支持的范围是 '1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999'mysql展示datetime类型值是通过'YYYY-MM-DD hh:mm:ss[.fraction]'格式。同样的datetime类型的赋值可以通过字符串类型和数字类型。
### timestampfsp
时间戳类型。timestamp类型支持的范围是'1970-01-01 00:00:01.000000' UTC 到 '2038-01-19 03:14:07.999999' UTC。timestamp类型的值存储着从('1970-01-01 00:00:00' UTC)其经过的秒数。
> ***timestamp类型不能表示'1970-01-01 00:00:00'因为该时间点等于timestamp类型的计时起点但是timestamp类型中0已经被预留来代表 '0000-00-00 00:00:00'***
> ***explicit_defaults_for_timestamp已启用***
> 如果 explicit_defaults_for_timestamp 属性已经被启用那么不会将CURRENT_TIMESTAMP赋值给timestamp字段做默认值也不会在更新时自动将CURRENT_TIMESTAMP赋值给timestamp字段。并且任何没有声明为not null的timestamp字段都是可为空的。
> ***explicit_defaults_for_timestamp未启用***
> 除非被显式指定否则数据表中的timestamp列都会被赋值为最近修改的datetime。该属性开未开启时可以通过timestamp字段记录上次update或insert时间。
> 可以通过为timestamp字段赋值一个null来将该字段设置为当前时间除非该字段在定义时通过NULL属性声明该字段可以为空。
> ***自动赋值为当前时间和记录更新时间设置***
> 可以在定义该timestamp列字段时指定DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP,为该timestamp字段指定默认值和记录最近更新时间。默认情况下第一个timestamp列字段具有这些属性数据表中的任何timestamp字段也可以手动指定这些属性。
### time(fsp)
time类型的范围为'-838:59:59.000000'到'838:59:59.000000'msyql显示time类型的格式为'hh:mm:ss[.fraction]'但是对time类型的赋值既可以用字符串类型也可以用数字类型。
### YEAR(4)
year类型用来表示年year类型通过YYYY格式进行展示为year类型字段赋值既可以通过字符串类型也可以通过数字类型。
> 对于时间类型avg和sum等聚合函数不起作用。该类聚合函数会将值转化为数字并在遇到第一个非数字字符时转换失败。如果想要对时间类型使用聚合函数需要在使用前将时间类型转化为数字单元并在聚合后将数字单元转化为时间类型如下
> ```sql
> SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
> SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
> ```