專題實驗 日期型別

2021-09-09 01:12:06 字數 2266 閱讀 1710

儲存的時間表示與標準時間 utc 的時差, utc 表示0:0

date: 不帶時區, 儲存日期和時間, 精確到秒

timestamp: 不帶時區, 儲存日期和時間, 精確到小數點後9位

timestamp with timezone: 包括時區, 客戶端時區和utc的時區差, 例如: '1999-04-15 8:00:00-8:00'  這裡是 負8小時.

timestamp with local timezone: 儲存到資料庫時, 會發生轉換. 儲存的是客戶端所在時區, 轉換: 客戶端所在時區->utc->db所在時區, 所以如果db所在時區設定成utc, 那麼右邊就不需要轉換.

注意, 這個轉換都是先轉換成 utc, 然後再從utc像另一種時間轉換, 所以, 如果需要儲存 timestamp with local timezong 這種型別, 建議將db time zone 設定成 utc, 這樣, 轉換的次數可以減少一次.

面對這麼多型別, 什麼時候使用什麼型別 ?

其他一些考慮:

interval

interval year to month:

interval day to second:

下邊是計算工齡的例子

1:  -- chap10_02.sql
2:  declare
3:      start_date timestamp;
4:      end_date timestamp;
5:      service_interval interval year to month;
6:      years_of_service number;
7:      months_of_service number;
8:  begin
9:      start_date := to_timestamp('29-dec-1988', 'dd-mon-yyyy');
10:      end_date := to_timestamp('26-dec-1995', 'dd-mon-yyyy');
11:
12:      -- 確定工齡, 並顯示出來:
13:      service_interval := (end_date - start_date) year to month;
14:      dbms_output.put_line(service_interval);
15:
16:      years_of_service := extract(year from service_interval);
17:      months_of_service := extract(month from service_interval);
18:      dbms_output.put_line(years_of_service || 'years and ' || months_of_service || 'months');
19:  end;
20:  /
21:  show errors;
oracle 分為兩大時區

資料庫時區 select dbtimezone from dual

session時區 select sessiontimezone from dual

alter session set nls_date_format = 『yyyy-mm-dd hh24:mi: ss』;

在了解了相關資料型別後,那麼我們該如何在它們之間做出選擇呢?

當你不需要儲存時區/地區資訊的時候,選擇使用timestamp資料型別,因為它一般需要7-11bytes的儲存空間,可以節省空間。

當你需要儲存時區/地區資訊的時候,請選擇使用timestamp with timezone資料型別。比如乙個跨國銀行業務應用系統,需要精確紀錄每一筆交易的時間和地點(時區),在這種情況下就需要紀錄時區相關資訊。因為需要紀錄時區相關資訊,所以需要多一些的儲存空間,一般需要13bytes。

當你並不關心操作發生的具體地點,而只是關心操作是在你當前時區(當地)幾點發生的時候,選擇使用timestamp with localtime zone。比如乙個全球統一的change controlsystem。使用者可能只關心某某操作是在我的時間幾點發生的(比如中國使用者看到的是北京時間8:00am,而倫敦的使用者看到的是0:00am)。記住,此類行不儲存時區/地區資訊,因此如果需要儲存相關資訊的要慎重!

BUPT複試專題 日期 2013

請你計算出第年月日是第x年的第幾天。其中,1月1日是第一天,1月2日是第二天,以此類推。計算時請注意閏年的影響。對於非整百年,年數能整除4是閏年,否則不是閏年 對於整百年,年數能整除400是閏年,否則不是閏年。如1900年和1901年不是閏年,而2000年和2004年是閏年。第一行有乙個整數,表示一...

日期型別比較

表 user id,createdon id,建立時間 situation 1 查出所有建立時間在2011年9月1日之後的記錄。mysql 最簡單了 select from user where createdon 2011 09 01 mysql的日期處理能力很強大,可以精確到年 月 日 時 分 ...

日期型別轉換

public static final int hours 0 public static final int minutes 1 將字串轉換成日期格式 param date param format return throws exception public static date parsed...