oracle常用命令(hive轉換)

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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章