最近在入庫一大批資料,入了20多張表整整一天半時間,可謂是臉都僵了,然而就在處理日期型和時間型資料,通過自己的摸索,get到了一些套路,還是很開心的,趁請假還是好好總結一下吧!鑑於日期型資料date通常是用yyyy-mm-dd的格式進行儲存查詢,而時間型資料time在網上我也沒看到太多參考,但是注意到資料庫是有time這個型別資料的,格式是hh:mm:ss,因此向著這兩個格式去對資料進行整理。
一般我們接到的日期時間型資料完整的文字是長這樣的:
2016/11/1 12:00:00or2016-11-01 12:00:00 or2016/11/1 12:00
文字源資料通常將日期和時間都預設在乙個字段。而我的想法是:為了減輕後期資料查詢的難度,將日期時間型資料都整理為對應的日期時間型,即date和time,這樣後期就不用其他的cast等函式進行查詢。
因此處理的步驟為:
1、分割字段
在ue編輯器中將日期時間型資料進行分割,如2016/11/1 12:00:00分割成2016/11/1|12:00:00,其中|為分割符;
2、編輯資料入庫指令碼
如果源資料的日期本來就是對應的'yyyy-mm-dd'如: 2016-11-01(嚴格符合,否則出錯,2016-11-1也是不符合的)那麼入庫的時候就可以直接指定字段型別:
日期欄位名稱 date format(『yyyy-mm-dd』)那麼分割後的時間字段同理,如果本來的格式就是hh:mm:ss,那麼直接指定字段型別:
時間欄位名稱 time如果源資料不是這種型別的格式,像2016/11/1、2016/11/01這種,那麼入庫的時候直接用varchar型別入庫就好,後期再處理。
3、格式處理
入庫了以後,如果格式本來就是對應那兩種,那很好,收工檢查資料看看有沒有亂碼和重複資料就好;如果不是那兩種,那就要進行資料處理了。
一般入庫我會用乙個temp作為表名,因為資料格式都比較純天然。入庫以後再建乙個新錶插入temp表的資料,插入的同時也對資料進行處理。
處理的過程:
先用其他函式對資料進行處理,整理成對應的格式,最後用cast函式對欄位進行型別轉換。使用的函式:
casewhen +substring/index/length/||這些函式自由組合,發揮自己的想象力即可。
簡單的來說就是使用substring/index/length/函式對資料進行識別,用case when和||處理資料,拼接成自己想要的樣子,不過要注意同樣的一列資料可能存在不同的情況,因此要借用case when來處理,不確定的話可以select一下試試先。
具體的函式功能看看teradata sql文件即可,這裡不詳細介紹了。
以下是幾個例子:
4、字段型別轉換
通過以上步驟,基本上可以將資料處理成對應的格式,在外層再加乙個select的語句進行最後的轉換即可。
例如:
select cast(欄位a as date format 'yyyy-mm-dd') as date_name,
cast(欄位b as time) as time_name
from
(select case when
length....else....end as 欄位a
,case when
length....else....end as 欄位b
from temp
) a
;
5、檢查將入庫的字段進行查詢檢查,看是否處理不當或者存在編碼問題,檢查資料量是否一致等等。 時間戳轉日期格式
時間戳轉日期格式 轉換前格式 時間戳 秒 時間戳 毫秒 轉換後格式 年月日時分秒 年月日 時分秒 月日時 轉換前 例 1555459200 1555459200000 轉換後 例 2019 04 17 08 00 00 2019 04 17 08 00 00 格式 yyyy mm dd hh mm ...
PHP日期格式轉時間戳
php 提供了函式可以方便的將各種形式的日期轉換為時間戳,該類函式主要是 strtotime 將任何英文文字的日期時間描述解析為時間戳。mktime 從日期取得時間戳。strtotime strtotime 函式用於將英文文字字串表示的日期轉換為時間戳,為 date 的反函式,成功返回時間戳,否則返...
PHP日期格式轉時間戳
php 提供了函式可以方便的將各種形式的日期轉換為時間戳,該類函式主要是 strtotime 將任何英文文字的日期時間描述解析為時間戳。mktime 從日期取得時間戳。strtotime strtotime 函式用於將英文文字字串表示的日期轉換為時間戳,為 date 的反函式,成功返回時間戳,否則返...