sql基礎関数

25488 ワード

小さなメモ:

データ型のフォーマット:

cast(col as int)

日付、時刻


タイムスタンプ-時間変換:
select FROM_UNIXTIME(1156219870)
--> 2006-08-22 12:11:10

タイムスタンプ変換:
select UNIX_TIMESTAMP('2006-11-04 12:23:00');
-->1162614180

現在のタイムスタンプを出力:
select UNIX_TIMESTAMP();  | select UNIX_TIMESTAMP(now());

時間書式:
select DATE_FORMAT(FROM_UNIXTIME(1156219870),'yyyy-MM-dd HH:mm:ss')
-->2006-08-22 12:11:10

日付関数:
select trunc(CURRENT_DATE, 'MM'),  -- 
 last_day(CURRENT_DATE);  -- 

取得日時時間、分、秒:[to_date、year、month、day、hour、minute、second]
select to_date('2011-12-08 10:03:01')
-->2011-12-08
select year('2011-12-08 10:03:01')
-->2011
select month('2011-12-08 10:03:01')
-->12
select day('2011-12-08 10:03:01')
-->8
select hour('2011-12-08 10:03:01')
-->10
select minute('2011-12-08 10:03:01')
-->3
select second('2011-12-08 10:03:01')
-->1

差分日数:
select datediff('2012-12-08','2012-10-08');   
-->61

増加日数:
select date_add('2012-12-08',4);   
-->2012-12-12

日数を減らす:
select date_sub('2012-12-08',4);   
-->2012-12-04

時間差:unix_timestamp() - unix_timestamp(ymdhms)は、2つの時間がtimestampに変換された後に減算され、timestamp単位は秒であり、減算された後に2つの時間の差の秒数である.
CAST((unix_timestamp() - unix_timestamp(ymdhms)) % 60 AS int) 。
CAST((unix_timestamp() - unix_timestamp(ymdhms)) / 60 AS int) % 60 。
CAST((unix_timestamp() - unix_timestamp(ymdhms)) / (60 * 60) AS int) % 24 。
CAST((unix_timestamp() - unix_timestamp(ymdhms)) / (60 * 60 * 24) AS int)

eg:時間
select CAST((unix_timestamp('2020-10-21 12:23:00') - unix_timestamp('2020-10-21 10:23:00'))/ (60 * 60) AS int) % 24
-->2

全型回転時間タイプ:ステップ:先回転時間をstring、後回転タイムスタンプ、最後回転時間
set dt=20200701    -- 
select ${dt},
from_unixtime(unix_timestamp(cast(${dt} as string),'yyyyMMdd'),'yyyy-MM-dd') ;

判断条件:


1、ifとcase:いずれも単一カラムを処理する判断クエリー結果
select count(if(d2['01008'] is not null and d2['01008']!='' ,1,null)) IMSI,
case whenselect case os when 'android' then 'android' when 'ios' then 'iPhone' else 'PC' end as os,
case whenselect sum(case when before_prefr_unit_price < 100 then 1 else 0 end ) as a1,
       sum(case when before_prefr_unit_price >= 100 and before_prefr_unit_price < 200 then 1 else 0 end) as a2,
       sum(case when before_prefr_unit_price >= 200 and before_prefr_unit_price < 300 then 1 else 0 end) as a3,
       sum(case when before_prefr_unit_price >= 300 then 1 else 0 end) as a4
from gdm_m04_ord_det_sum
where  to_date(sale_ord_dt) = '2014-11-11' and dp = 'ACTIVE'

2、nvl nullに対する判断:null値の置換select nvl(col,1)from tbを実現する--最初のパラメータがnullであれば、出力は2番目の置換3、coalesce:非空検索関数で、多くのパラメータを持つことができる
select COALESCE(null,null,null,50);

substr切り取り文字列:

select substr('abcde',3)
-->cde
select substr('abcde',-3,2)  --2 len
-->cd

split文字列分割:

select split('192.168.0.1','\\.')[0];
-->192

正則[like,rlike,regexp,regexp_replace,regexp_extract]


1、like[_は単一文字、%は複数文字を識別する]
select 'football' like '__otba%'
-->true

2、rlikeはregexpと同じ使い方
"."任意の1文字"*"は前の文字に0回または複数回"+"は前の文字に1回または複数回"?前の文字に一致する0回または1回の「d」は[0-9]に等しく、使用する場合は「d」「D」は[^0-9]に等しく、使用する場合は「D」に書く
select 'football' rlike '^footba'
-->true
select 'does' rlike 'do(es)?'
-->true

3、regexp_replace:正規表現に置き換える
select regexp_replace('h234ney', '\\d+', 'o')
-->honey

4、regexp_extract:正規に分割し、指定したindex文字を1から返す
select regexp_extract('honeymoon', 'hon(.*?)(moon)', 1);
-->honeymoon
select regexp_extract('honeymoon', 'hon(.*?)(moon)', 1);
-->ey
select regexp_extract('honeymoon', 'hon(.*?)(moon)', 2);
-->moon

欲張りは最後のスラッシュにマッチします.
select
regexp_extract('com.baidu.searchbox/oat/arm/chinamobile/cactus.com.baidu.searchbox','.*/(.*)',1) c_0

数学関数:


1、round保留n位小数
select round(12.344,2)  
-->12.34

テーブルのフィールド情報とメタデータの格納パスの表示
desc formatted table_name;

ダイナミックパーティションパラメータの設定
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

パーティションデータの削除
alter table   drop partition(stat_date=',,');

挿入データinsert overwriteは既存のデータを上書きし,insert intoは単純な挿入であり,元のテーブルのデータを考慮せずに直接テーブルに追加する.
bashクエリーデータローカル保存
hive -e 'select * from table_name;' >> /home/test.txt
hive -f exer.sql >> /home/test.txt

likeの使い方
select * from user where name like concat(%,  ,%)

テーブルの作成
CREATE TABLE IF NOT EXISTS tmp.code_name (
rule_name string,
rule_code string)
row format delimited fields terminated by '\t' lines terminated by '
'
stored as textfile;

join join hive join不等量がないjoinはleft joinを必要とした後、空の操作を判定します.
on b.noriskfactor=c.tag where c.tag is null 

次のエラー
on b.noriskfactor=c.tag and c.tag is null