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;