日期時間類型自動轉型
--?now()、字符串、數字轉datetime類型
create table t(dt datetime);
insert into t values(now());
insert into t values('2007-9-3 12:10:10');
insert into t values('2007/9/3 12+10+10');
insert into t values('2007#9#3 12+10+10');
insert into t values('2007+9+3 12+10+10');
insert into t values('20070903121010');
insert into t values(20080903121010);
--?now()、字符串、數字轉date類型
create table test(dt date);
insert into test values(now());
insert into test values('2007-9-3 12:10:10');
insert into test values('2007/9/3 12+10+10');
insert into test values('2007#9#3 12+10+10');
insert into test values('2007+9+3 12+10+10');
insert into test values('20070903121010');
insert into test values(20080903121010);
--?now()、字符串、數字轉time類型
create table t3(dt time);
insert into t3 values(now());
insert into t3 values('2007-9-3 12:10:10');
insert into t3 values('2007/9/3 12+10+10');
insert into t3 values('2007#9#3 12+10+10');
insert into t3 values('2007+9+3 12+10+10');
insert into t3 values('20070903121010');
insert into t3 values(20080903121010);
--?now()、字符串、數字轉timestamp類型
create table t4(dt timestamp);
insert into t4 values(now());
insert into t4 values('2007-9-3 12:10:10');
insert into t4 values('2007/9/3 12+10+10');
insert into t4 values('2007#9#3 12+10+10');
insert into t4 values('2007+9+3 12+10+10');
insert into t4 values('20070903121010');
insert into t4 values(20080903121010);
--?在任何時間,now()、任意分隔符的年月日時分秒字符串、年月日時分秒數字串都可以拿來當日期類型、時間戳使用。但月日時分秒要保持2位數。
--?日期類型可以轉時間戳,時間戳不能轉時期類型
drop table test;
create table test(dt date);
insert into test values(unix_timestamp()); --? 報錯
drop table test;
create table test(dt timestamp);
insert into test values(curdate());
--?加減運算
--?now(),sysdate(),current_timestamp(),curdate(),curtime() 函數和日期時間類字段都可以加特定格式的數字
select now(),now()+1,now()-1,now()+101,now()+050000;
--?加1秒,減1秒,加1分1秒,加5小時,不會報錯,但最后一個結果有問題:20180714265220,26點是錯的
--?2018-07-14 21:52:20, 20180714215221, 20180714215219, 20180714215321, 20180714265220
select sysdate()+1, current_timestamp()+1, curtime()+1, curdate()+1; --? 最后這個是加一天
-- 20180714215353, 20180714215353, 215353, 20180715
drop table test;
create table test(id datetime);
insert into test values(now()+010000);
insert into test values(now()+050000);? -- 報錯,因為現在是21:48,加上5小時就成26點了就不對了,他只會自顧自地往上加
drop table test;
create table test(id timestamp);
insert into test values(now());
select id, id+1, id+101, id+010000 from test;
drop table test;
create table test(id date);
insert into test values(now());
select id, id+1, id+101, id+010000 from test;
--?比較運算
-- 日期類型
-- datetime類型
drop table test;
create table test(id datetime);
insert into test values(now());
select * from test where id > '1999-1-1'; //結果:2018-07-13 03:38:35
select * from test where id > '1999=1=1'; //結果:2018-07-13 03:38:35
select * from test where id > '1999'; //結果:2018-07-13 03:38:35
select * from test where id > 1999; //結果:2018-07-13 03:38:35
select * from test where id < now(); //結果:2018-07-13 03:38:35
-- year 類型
drop table test;
create table test(id year);
insert into test values(now());
select * from test where id > '1999-1-1'; //結果:2018
select * from test where id > '1999=1=1'; //結果:2018
select * from test where id > '1999'; //結果:2018
select * from test where id > 1999; //結果:2018
select * from test where id > '1999=1=1'; //結果:2018
select * from test where id < now();
-- timestamp 類型
drop table test;
create table test(id timestamp);
insert into test values(now());
select * from test where id > '1999-1-1'; //結果:2018-07-13 03:44:44
select * from test where id < now(); //結果:2018-07-13 03:44:44