최근 "MySQL의 기술 내부자 : SQL 프로그래밍"을 읽고 블로그 노트의 일종 인 메모를했다, 점유율은 자신의 검토를 용이하게하기 위해, 또한 다른 사람을 도울 수
첫째, 공간은 비교 날짜 유형에 의해 점령
datetime 데이터 형식 공간의 다양한 점령 :
유형 | 발자국 |
---|---|
날짜 시간 | 8 바이트 |
데이트 | 3 바이트 |
TIMESTAMP | 4 바이트 |
년 | 1 바이트 |
시각 | 3 바이트 |
두, DATETIME과 비교 DATE
- DATETIME 만 일자는 또한 시간 표시 8 바이트를 차지 기간은 "1000년 1월 1일 0시 0분 0초" "9999-12-31 23시 59분 59초"로 표현 될 수있다
- 날짜가 특정 시간을 표시하지 않습니다, 3 바이트, 날짜 만 표시를 차지, 날짜 범위를 표시 할 수 있습니다로 "1000년 1월 1일"에서 "9999-12-31"
좋아, 여기에 특별히 문제 TIMESTAMP 초의 소수 부분을 소개합니다
참고 : 5.6.4+ 버전은 소수점 이하의 초를 지원, 이전 버전은 지원되지 않습니다
# 查询MySQL版本
select version();
# 建表验证问题
create table t (a datetime);
# 写数据秒后面加上小数
insert into t select '2019-10-11 17:16:12.55555';
# 查询,发现并没有查出秒之后的小数
select * from t ;
# 使用microsecond,读取秒之后的小数
select microsecond('2019-10-11 17:16:12.55555') ;
# CAST读取,验证了5.7+版本查询时候会出现四舍五入,如下sql得到2019-10-11 17:16:12,而低版本就不会
SELECT CAST('2019-10-11 17:16:12.5555' AS DATETIME) ;
# CAST读取,5.7+版本查询,四舍五入得到,2019-10-11 17:16:12,低版本正常显示,具体哪个版本开始的不知道,我在5.7+版本验证都是会出现四舍五入的情况
select cast('2019-10-11 17:16:12.1234' as datetime) ;
# 5.6.4+版本支持秒的小数部分
# 支持的类型有TIME、DATETIME、TIMESTAMP,写法是type(size),size为小数部分精度,最大为6
# 删表,再验证一下
DROP TABLE t;
# 这里指定精度
CREATE TABLE t (a DATETIME(4));
# 秒后加小数,写数据
INSERT INTO t SELECT '2019-10-11 17:16:12.55555';
# 查询,发现可以正常写数据,不过精度只有4
SELECT * FROM t ;
세 가지가 TIMESTAMP 유형 소개
TIMESTAMP 4 바이트 범위 "2038년 1월 19일 3시 14분 7초"UTC의에 "1970-01-01"UTC 표시
, 세계 표준 시간을 국제 표준시, 또한 통합 된 세계 시간으로 알려진 : UTC : 주 유니버설 시간 조정
참고 :
- 테이블을 업데이트, 열 TIMESTAMP 유형은 자동으로 현재 시간을 업데이트하기 위해 제공 될 수있다
- 로 TIMESTAMP 날짜 유형은 기본 값을 설정할 수 있지만 DATETIME을 지원하지 않습니다
예, 테스트, 기본 설정 및 자동 업데이트를 설정합니다
# 新增一张表
CREATE TABLE t (
a INT,
b TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE = INNODB ;
# 写一条数据
INSERT INTO t (a) VALUES (1);
# 查询,发现自动赋默认值时间
SELECT * FROM t;
검증 문제는 시간을 자동으로 업데이트
# 修改字段为自动更新(数据有改变时候才会自动更新)
ALTER TABLE t MODIFY COLUMN b TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
# 删一下表数据
DELETE FROM t;
# 写初始化数据
INSERT INTO t SELECT 1,CURRENT_TIMESTAMP;
# 查询,先记录下原来时间
SELECT * FROM t;
# 修改数据
UPDATE t SET a =2;
# 如果修改为1,是不会改变时间的
SELECT * FROM t;
네, 년 TIME 유형 비교
- YEAR 타입은 책자에 소개 될 때 정의된다 (4). YEAR (2) 또는 YEAR의 표시 폭을 지정하는 1 바이트를 사용하지만, 내 버전 5.7 이상 MySQL의 인증에, 또는 단지 정의 해 YEAR 발견. (4) 즉, 새로운 버전이 지원되지 않습니다 YEAR (2) 본 형태
YEAR (4) 1901 및 2155에 대한 해를 도시하고,이 범위보다 후, MySQL은 또한 쓸 수 있지만, 0000에 할당 - TIME 타입 만 3 바이트, "-838 : 59 : 59"의 표시 범위 ~ "838 : 59 : 59"TIME 때문에 시간을 절약하기 위해 이용 될 수있는 음의 값일 수있다 23시간보다 큰 간격
다섯째, 날짜 및 시간 함수
- NOW, CURRENT_TIMESTAMP 기능과 SYSDATE
MySQL은, CURRENT_TIMESTAMP 기능과 SYSDATE를 더 많이 소개 NOW 사용
예를 들어, 다음 슬립 기능,과 슬립 기능은 이전에 수행 비교 후,이 함수는 인수 시간과 비교
SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE(),SLEEP(2),NOW(),CURRENT_TIMESTAMP(),SYSDATE();
도 대비에서 볼 수, NOW () 실제로 CURRENT_TIMESTAMP (), (2), 2 초마다 계속하려면 수면 사용의 예에서, 당신은 지금, CURRENT_TIMESTAMP 실제로 얻을, 그 비교할 수 있습니다 이탈리아에 가까운 기능 전체 SQL 시작이다 실행 시간이 다른 이전과 이후 시간 전이나 후에 절전 기능이 실행되어 있는지 여부를 수행하고, SYSDATE 실제로 시간이 기능 SYSDATE 시간을 수행 할 수 아닌 전체 시간 SQL 시작하기 때문에 절전 기능을 얻을
- DATE_ADD 및 기능 DATE_SUB
DATE_ADD (날짜 간격 EXPR 타입) 및 DATE_SUB (datte, INTTERVAL의 EXPR 타입) expr이 음수가 될 수 있으며,이 모두 DATE_ADD 일 또한 사용될 수 있고, 감산 기간도 사용될 수있다. 입력 할 수 있습니다 년, 월, 일,시, 분, 초
SELECT NOW()AS NOW,DATE_ADD(NOW(),INTERVAL 1 DAY) AS tomorrow,DATE_SUB(NOW(),INTERVAL 1 DAY);
참고 : 윤월, 그것은 29 일 윤년 개월 수익률이 아닌 28 윤달 반환하는 경우
SELECT DATE_ADD('2004-2-29',INTERVAL 1 YEAR);
SELECT DATE_ADD('2004-2-29',INTERVAL 4 YEAR);
- DATE_FORMAT 함수
인쇄 기능 오라클 타입의 비트에 TO_CHAR DATE_FROMAT 및 기능은, 사용자 정의 형식의 데이터 인
SELECT DATE_FORMAT(NOW(),'%Y%m%d');