select * from tt_table where to_char(fkdat,'yyyy-MM-dd') < '2019-01-01'
#改成hive語句
select * from tt_table where date_format(fkdat,'yyyy-MM-dd') < '2019-01-01'
----------------------建表語句------------------------
字段類型:
名稱:SERIES_NAME VARCHAR2(200)
數字:ONWAY NUMBER
標識:FLAG NUMBER(1)
日期:DATE_DAY VARCHAR2(20)
create table CUSTOMER_COUNT
(
UPDATE_DATE DATE not null,
RSSC_ID VARCHAR2(100) not null,
COUNT NUMBER not null,
RSSC_NAME VARCHAR2(100) not null,
PROVINCE_ID VARCHAR2(100) not null,
PROVINCE_NAME VARCHAR2(100) not null
);
comment on table CUSTOMER_COUNT
is '潛客總數';
comment on column CUSTOMER_COUNT.UPDATE_DATE
is '計算結果的前一個正點時間';
comment on column DACU.CUSTOMER_COUNT.RSSC_ID
is '大區id';
comment on column DACU.CUSTOMER_COUNT.COUNT
is '計算結果';
comment on column DACU.CUSTOMER_COUNT.RSSC_NAME
is '大區名稱';
comment on column DACU.CUSTOMER_COUNT.PROVINCE_ID
is '省份id';
comment on column DACU.CUSTOMER_COUNT.PROVINCE_NAME
is '省份名稱';
-----------------------通用方法------------------------
條件函數
if(1=2,100,200)作用:當條件爲TRUE時,返回100
case id when '001' then '1111' else '2222' end
case when age='20' then 1 else 0 end
trunc函數
select trunc(123.567,2) from dual;--123.56,將小數點右邊指定位數後面的截去
select trunc(123.567,-2) from dual;--100,表示將小數點左邊指定位數後面的部分截去,即均以0記
select trunc(123.567) from dual;--123,默認截去小數點後面的部分
TO_CHAR函數
TO_CHAR (d.bill_date, 'yyyy-mm') --把日期或數字轉換爲字符串
TO_DATE函數
TO_DATE ('20180401', 'yyyymmdd') --把字符串轉換爲數據庫中得日期類型
to_date(concat(year(date_sub(CURRENT_DATE,1)),'-01-01')) --2018-01-01
substr函數
select substr('abcde',3) --cde
select substring('abcde',3) --cde
select substr('abcde',-1) --e
select substr('abcde',1,2) --ab
select substr('abcde',0,2) --ab 默認都是從第一位開始取
NVL函數
NVL(sum(l.fuwu_lamount),0) --從兩個表達式返回一個非 null 值
非空函數
SELECT COALESCE(NULL, NULL, 1) -- return 1 返回參數中第一個非null的值
日期處理函數
#當前日期上個月201810
SELECT date_format(add_months(CURRENT_DATE,-1),'yyyyMM')
#當前日期-1天日期的上個月201901
select concat(year(date_sub(CURRENT_DATE,day(CURRENT_DATE))),lpad(month(date_sub(CURRENT_DATE,day(CURRENT_DATE))),2,0))
---------------------Oracle轉Hive------------------------
SELECT *
FROM OMD.TT_DEPOSIT_ORDER
WHERE MATCH_STATUS <> '4'
AND TO_CHAR(CREATE_DATE, 'yyyy-MM') = TO_CHAR(sysdate, 'yyyy-MM')
#改成hive語句後
SELECT *
FROM TT_ORDER
WHERE MATCH_STATUS <> '4'
AND from_unixtime(unix_timestamp(CREATE_DATE),'yyyy-MM') = '2015-01'
分頁查詢
查詢返回前10行:
select * from TT_ORDER where rownum<=10;
查詢結果返回中間的10到100行:
select * from OB_TT_ORDER where rownum<101 minus select * from OB_CALL_DATA_LOG rownum>9;
#改成hive語句後
select * from TT_ORDER limit 10;
select * from (select row_number() over (order by xx) as rnum ,o.* from TT_ORDER o) t where rnum > 9 AND rnum < 101;
查看用戶所有表
select * from user_tables;
//select * from all_tables where owner='USER';
#改成hive語句後
show tables;
oracle爲表增加字段和註釋
--指定表中添加多個字段
alter table DACU.tt_shipping
add total_p NUMBER
add amount_oil_p NUMBER
add amount_tyre_p NUMBER
-- 逐條執行,添加字段的註釋
COMMENT ON COLUMN DACU.tt_shipping.total_p IS '總計total';
COMMENT ON COLUMN DACU.tt_shipping.amount_oil_p IS '字段oil';
COMMENT ON COLUMN DACU.tt_shipping.amount_tyre_p IS '字段tyre';
附加日誌(如果某列的值爲YES就是開了)
--全量日誌,標識鍵日誌,最小日誌
select supplemental_log_data_all, supplemental_log_data_pk, supplemental_log_data_min from v$database;