mysql之日期

1.在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。

Text 类型:

数据类型 描述
CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TINYTEXT 存放最大长度为 255 个字符的字符串。
TEXT 存放最大长度为 65,535 个字符的字符串。
BLOB 用于 BLOBs(Binary Large OBjects)。存放最多 65,535 字节的数据。
MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB 用于 BLOBs(Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.) 允许您输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。

注释:这些值是按照您输入的顺序排序的。

可以按照此格式输入可能的值: ENUM('X','Y','Z')

SET 与 ENUM 类似,不同的是,SET 最多只能包含 64 个列表项且 SET 可存储一个以上的选择。

Number 类型:

数据类型 描述
TINYINT(size) -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。
SMALLINT(size) -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。
MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。
INT(size) -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。
BIGINT(size) -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。
FLOAT(size,d) 带有浮动小数点的小数字。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d) 带有浮动小数点的大数字。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。在 size 参数中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

*这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。

Date 类型:

数据类型 描述
DATE() 日期。格式:YYYY-MM-DD

注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'

DATETIME() *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'

TIMESTAMP() *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

TIME() 时间。格式:HH:MM:SS

注释:支持的范围是从 '-838:59:59' 到 '838:59:59'

YEAR() 2 位或 4 位格式的年。

注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

*即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
地址:https://www.w3cschool.cn/sql/anioefpk.html
2.在建表时怎么设置默认时间?

只有一种方法,使用current_timestamp(current_date/current_time只能用作查询显示时间)

例如:

create table test(
id int(4) not null AUTO_INCREMENT,
times TIME NOT NULL DEFAULT CURRENT_TIME,//不支持current_time
dates DATE NOT NULL DEFAULT CURRENT_DATE,//不支持current_date
timestamp timestamp not null default current_timestamp,//仅支持current_timestamp
primary key(id)
)engine=innodb auto_increment=1 default charset=utf8

3.date函数有哪些?

下面的表格列出了 MySQL 中最重要的内建日期函数:

函数 描述
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分,语法:DATE(date)
例:SELECT DATE('1995-02-05 23:2:22');
EXTRACT() 返回日期/时间的单独部分,语法:EXTRACT(unit FROM date),unit的值有多个。
例:SELECT EXTRACT(DAY FROM ordertime) AS DATE FROM test5;//day 表示仅返回日,ordertime是表test5的列
DATE_ADD() 向日期添加指定的时间间隔,语法:DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

type 参数可以是下列值:http://www.runoob.com/sql/func-date-add.html
例:SELECT CURRENT_DATE,DATE_ADD(CURRENT_DATE,INTERVAL 40 DAY);

DATE_SUB() 从日期减去指定的时间间隔,语法:DATE_SUB(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

type 参数可以是下列值:同上

DATEDIFF() 返回两个日期之间的天数,语法:DATEDIFF(date1,date2)

date1 和 date2 参数是合法的日期或日期/时间表达式。

例:SELECT DATEDIFF(‘2017-5-1‘,'2017-05-20');//返回19

DATE_FORMAT()

用不同的格式显示日期/时间,语法:DATE_FORMAT(date,format)

date 参数是合法的日期。format 规定日期/时间的输出格式。

可以使用的格式有:http://www.runoob.com/sql/func-date-format.html

例:SELECT DATE_FORMAT(CURRENT_TIMESTAMP,'%Y-%m-%d %H:%i:%m'),
DATE_FORMAT(CURRENT_TIMESTAMP,'%y-%m-%d %T');//2018-09-10 12:56:09 ,18-09-10 12:56:01

now()、sysdate()、date()、
current_date和current_date()和curdate()、current_time和current_time()和curtime()、current_timestamp和current_timestamp()效果一样
其他时间函数

4.MySQL日期函数与日期转换格式化函数大全
https://www.jb51.net/article/135803.htm
日期转换格式化函数三种:mysql中常用的几种时间格式转换函数整理如下(包含第7点)

  1.  时间戳转换为日期from_unixtime(timestamp, format)
    SELECT FROM_UNIXTIME(23434,'%Y-%m-%d');
    ->1970-01-01
    
  2.  日期转换为时间戳unix_timestamp(date)
    select unix_timestamp('1997-10-16');
    ->876931200
  3.  日期转换任意时间格式date_format(date, format)
    SELECT DATE_FORMAT('1994-10-16','%m月%d日');
    ->10月16日

5.mysql之TIMESTAMP(时间戳)用法详解(https://www.jb51.net/article/51794.htm?=278673284

一、TIMESTAMP的变体

TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如:

  1. 在创建新记录和修改现有记录的时候都对这个数据列刷新:
    ordertime timestamp default current_timestamp on update current_timestamp,
  2. 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它:
    ordertime timestamp default timestamp,
  3. 在创建新记录的时候把这个字段设置为0,以后修改时刷新它:
    ordertime timestamp on update timestamp,
  4. 在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它:
    ordertime TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP

MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型

6.时间戳timestamp和datetime的区别(用哪一种好)    https://www.jb51.net/article/62532.htm

相同点

  1. 都可以用于表示时间
  2. 都呈字符串显示

不同点

  1. TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 开始所经过的秒数来储存,不考虑闰秒。
  2. datetime支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
    timstamp支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
  3. 工作方式不同:在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。
    TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。

7.MySQL中日期和时间戳互相转换的函数和方法  

参考第四点

猜你喜欢

转载自blog.csdn.net/yiguang_820/article/details/82587834