TERADATA中函式的使用

2021-07-06 04:18:34 字數 3221 閱讀 7903

cast函式  轉換函式,可以將字元型資料轉為日期型或資料型,將整型轉為浮點型,舉例如下

select cast('20140207' as date format 'yyyymmdd')

,cast('07' as float)

,cast(15 as float)

,cast(18.987654 as dec(5,3))

結果為20140207,7.00,15.00,18.988

這裡說明一點 dec(5,3)是指總共取5位,3位小數。如果cast(18.987654 as dec(5,4))這樣寫會報錯,數字溢位。

另外說明一下teradata四捨五入的原則,內部規則:

1.當5後面有1位不為0,則進製

2.當5後面都為0或沒有其他位時根據5前面的奇偶,奇進偶不進

具體採用哪種規則由dbscontrol下的引數roundhalfwaymagupju決定,預設為false採用內部規格(teradata定的)

分析函式

和其他型別的資料庫如oracle一樣,有如下的函式(列值)

row_number() over(partition by col1,col2 order by col3 desc,col4 asc);

rank() over(partition by col1,col2 order by col3 desc,col4 asc);

teradata還有乙個更巧的用法

qualify row_number() over(partition by col1,col2 order by col3 desc,col4 asc)=1;

這個語句是寫在where條件之後的,相單于乙個過濾條件。

日期函式 add_months

用法如下 add_months(cast('20130930' as date format 'yyyymmdd'),-1) 作用為求乙個月前的日期

這裡需要注意 此結果為20130830而不是8月末20130831

teradata中取年初,月初,月末的寫法如下

select cast(substr('20140207',1,4)||'0101' as date format 'yyyymmdd')

,cast(substr('20140207',1,6)||'01' as date format 'yyyymmdd')

,cast(substr('20140207',1,6)||'01' as date format 'yyyymmdd')-1

結果為20140101,20140201,20140131。

extract函式 用來擷取乙個日期中的天數,月,年

select extract(day from cast('20140207' as date format 'yyyymmdd'))

,extract(month from cast('20140207' as date format 'yyyymmdd'))

,extract(year from cast('20140207' as date format 'yyyymmdd'))

結果為7,2,2014

獲取兩個日期之間的天數,月數,年數之差寫法如下:

select (date '2014-02-07' - date '2014-01-01') day(4)   

, (date '2014-02-07' - date '2013-12-01') month(4)   

, (date '2014-02-07' - date '2013-05-01') year(4) 

結果為 37,2,1

coalesce函式,用途若乙個欄位為null,可以用其他值代替,用法如下:

coalesce(col1,'hello')

求字元型長度的函式有兩個 length,char。這兩個函式有所區別,length函式會自動去除空格,而char不會,舉例如下:

select length('abc   ')

,char('abc   ')

,char(trim('abc   '))   

結果為3,6,3

另外說明一點在perl指令碼中只能用char函式,perl不支援length函式

teradata中有系統日曆表 sys_calendar.calendar

teradata建立表的簡要寫法:

create multiset table tb_name as tb_name1 with data;帶資料建表效率比較低

create multiset table tb_name as tb_name1 with no data;只建表結構

這種寫法有個缺點,建的表tb_name 主索引不會和tb_name1一樣,新建的錶主索引為預設的第乙個字段,有可能主索引字段資料偏移很嚴重,資料重複率很高,這樣資料就會集中在幾個amp上,導致查詢效率低下。

建議用常規的建表方法

create multiset table tb_name

(col1 varchar(100) character set latin casespecific title '欄位1' not null,

col2 varchar(100) character set latin casespecific title '欄位2' not null,

col3 varchar(100) character set latin casespecific title '欄位3' not null,

col4 varchar(100) character set latin casespecific title '欄位4' not null

)primary index colidx ( col2,col3 );

改表名的寫法如下:

rename table tb_name to tb_name2

teradata還有一些常用函式是和其他資料庫一樣的,如 case when .. then.. else..end;

group by ;distinct;union;union all;minus;substr;sum;count;left join;right join;inner join

teradata還有一些特定的用法,如顯示表結構:show table tb_name1;

顯示執行計畫:explain sql1

列別名的使用:select '1' as col1,a.*

from  tb_name a

where col1='2'

這樣不管tb_name表中有多少條資料結果都為空。

TERADATA中函式的使用

cast函式 轉換函式,可以將字元型資料轉為日期型或資料型,將整型轉為浮點型,舉例如下 select cast 20140207 as date format yyyymmdd cast 07 as float cast 15 as float cast 18.987654 as dec 5,3 結...

Teradata 時間函式

時間差異 月 select date 2003 08 15 date 2003 01 01 month 時間差異 天 select date 2003 08 15 date 2003 01 01 more 時間差異 秒 select time02 10000 3600 time02 100 mod ...

Teradata工作用用到的實用函式

查詢表 select from dbc.tablesv where tablename like fin gl detail 大小比較無法現在select 後面,只能寫在where 後面 根據資料直接建立表 create table select with data 如果是with no data的...