oralce的TIMESTAMP型字段作為關聯條件

2022-07-16 18:15:14 字數 1685 閱讀 7443

兩個表,表a的內容是乙個列表,表b的內容是其明細。

a表,表名:head

b表,表名:detail

head表主鍵

字段 型

店鋪** varchar2(10)

番號1 number(2)

營業日 timestamp(6)

番號2 number(6)

detail表主鍵

字段 型

店鋪** varchar2(10)

番號1 number(2)

營業日 timestamp(6)

番號2 number(6)

行番號 number(5)

head表的資料量有上百萬條,detail表的資料量有上千萬條,

兩表關聯,sql如下:

select

--head表

h.aaa

--detail表

d.bbb

from

head h

inner join

detail d

on h.店鋪** = d.店鋪**

and h.番號1 = d.番號1

and h.營業日 = d.營業日

and h.番號2 = d.番號2

where

rownum < 100000

order by

h.營業日,

h.店鋪**,

h.番號1,

h.番號2,

d.行番號

因為如果不做rownum 小於10萬條的限制的話,結果會超過10萬條,不便於分析。

上述語句執行的很久,後來將關聯條件營業日做了如下調整,檢索速度就上來了,

and to_char(h.營業日, 'yyyymmdd') = to_char(d.營業日, 'yyyymmdd') --營業日

這麼做的理由是,營業日雖然是timestamp型,但是實際儲存的資料,是日期形式的,不包括時刻,即:

13-03-01 00:00:00.000000

所以,可以忽略時刻部分。

以下是完整的sql語句:

select

--head表

h.aaa

--detail表

d.bbb

from

head h

inner join

detail d

on h.店鋪** = d.店鋪**

and h.番號1 = d.番號1

and to_char(h.營業日, 'yyyymmdd') = to_char(d.營業日, 'yyyymmdd') --營業日

and h.番號2 = d.番號2

where

rownum < 100000

order by

h.營業日,

h.店鋪**,

h.番號1,

h.番號2,

d.行番號

以上是在開發過程中,碰到乙個問題,記錄下來,不知道大家是否碰到和我類似的問題。

順帶說一句,當rownum < = 1萬的時候,上面兩種方式的檢索時間沒多大差別。

mysql資料匯入遇到的timestamp型別問題

今天準備把最新的表匯入自己以前的機子上做臨時開發,在資料庫匯入的時候遇到乙個問題 incorrect table definition there can be only one timestamp column with current timestamp in default or on upd...

Oracle中date與timestamp的異同

在oracle中儲存date和時間資訊的話,實際上你有兩種字段資料型別的選擇 9i date資料型別 可以儲存月,年,日,世紀,時,分和秒。度量粒度是秒 以使用to char函式把date資料進行傳統地包裝,達到表示成多種格式的目的 select to char sysdate,mm dd yyyy...

oracle中date和timestamp的區別

如果你想在oracle中儲存date和時間資訊的話,實際上你由兩種字段資料型別的選擇的話,就讓我們看看這兩種資料型別的差別和它們提供了些什麼。date資料型別 這個資料型別我們實在是太熟悉了,當我們需要表示日期和時間的話都會想到date型別。它可以儲存月,年,日,世紀,時,分和秒。它典型地用來表示什...