我有一個包含 DATE_ID 列(整數資料型別)的表。此列基本上以 ID 格式存盤日期。輸入資料:
| DATE_ID |
|---|
| 19961210 |
| 19991001 |
| 20051212 |
| 20090108 |
我需要根據date_id列對該表( YEARly )進行磁區。請注意,這是一個現有的程序,我們正在將我們的表從資料庫遷移到另一個。這些列資料型別無法更改,因為它們將僅由下游行程以這種方式參考。
我嘗試了低于間隔磁區,但不知何故沒有奏效。有人可以幫忙嗎?
CREATE TABLE test (date_id INT NOT NULL, text VARCHAR2(500))
PARTITION BY RANGE (DATE_ID) INTERVAL (365)
(
PARTITION P0 VALUES LESS THAN (19961231),
PARTITION P1 VALUES LESS THAN (19991231),
PARTITION P2 VALUES LESS THAN (20091231)
);
uj5u.com熱心網友回復:
我得到了解決方案:
CREATE TABLE test (
DATE_ID INTEGER
)
partition BY RANGE (DATE_ID )
interval(10000)
(partition p0 values less than(19961231),
partition p1 values less than(19991231),
partition p1 values less than(20091231)
);
uj5u.com熱心網友回復:
您可以添加一個虛擬列以添加一個間隔磁區以及一個像樣的日期型別列,并且能夠交叉檢查現有整數值的資格是否被視為日期值,例如
CREATE TABLE test(
date_id INT NOT NULL,
text VARCHAR2(500)
);
ALTER TABLE test ADD (dt AS ( TO_DATE(date_id,'yyyymmdd') ));
ALTER TABLE test MODIFY
PARTITION BY RANGE(dt) INTERVAL (INTERVAL '1' YEAR)
(
PARTITION P1996 VALUES LESS THAN (date'1997-01-01'),
PARTITION P1999 VALUES LESS THAN (date'2000-01-01'),
PARTITION P2009 VALUES LESS THAN (date'2010-01-01')
);
如果您的目標是像標題所暗示的那樣為 1996 年到 2006 年的年份范圍添加年度磁區,那么您可以更喜歡使用動態方法來生成所需的代碼塊,例如
DECLARE
v_ddl CLOB;
BEGIN
FOR year in 1996..2006
LOOP
v_ddl := v_ddl||' PARTITION p'||year||' VALUES LESS THAN (date'''||TO_CHAR(year 1)||'-01-01''),'||CHR(13);
END LOOP;
v_ddl := 'ALTER TABLE test MODIFY PARTITION BY RANGE(dt) INTERVAL (INTERVAL ''1'' YEAR)'||CHR(13)||'('||CHR(13)||RTRIM(v_ddl,','||CHR(13));
v_ddl := v_ddl||CHR(13)||')';
DBMS_OUTPUT.PUT_LINE(v_ddl);
EXECUTE IMMEDIATE v_ddl;
END;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/417582.html
標籤:
下一篇:【推薦演算法論文閱讀】Graph Convolutional Neural Networks for Web-Scale Recommender Systems
