2017-07-28 29 views
1

我在配置單元環境中運行查詢。到目前爲止的字符串 - 配置單元SQL

我有一個列有一個時間戳,但在表中設置一個字符串。我試過如下:所有的人都返回null

SELECT 
,To_date(activitydate) 

演員:

,cast(activitydate as timestamp) 

這是數據是如何設置的表:

欣賞我如何能任意輸入這個轉換:

05/12/2017 00:00:00  



SELECT 
cust_id 
,to_date(activitydate) activity_date 
,type type_of_contact 


FROM repl_task 

WHERE to_date(activitydate) BETWEEN '2014-01-01' AND '2017-01-01' ; 

我運行內存,如果我運行此:

SELECT 
cust_id 
,activitydate 
,SUBSTR(activitydate,4,2) AS DT 
,SUBSTR(activitydate,0,2) AS MONTH 
,SUBSTR(activitydate,7,4) AS YEAR 
,type 


FROM task 

WHERE activitydate >='01/01/2016 00:00:00' 
+0

到底爲什麼你需要的日期?你能向我們展示完整的查詢嗎? –

+0

我需要日期來篩選出表格,而我只需要3年的數據,否則表格就會有25年的數據。 – sai

+0

以下是我正在使用的工作: – sai

回答

1

unix_timestamp功能轉換給定格式UNIX時間戳和from_unixtime功能從UNIX時間戳轉換成給定的格式:

hive> select from_unixtime(unix_timestamp('01/01/2016 00:00:00','MM/dd/yyyy HH:m:ss'),'yyyy-MM-dd'); 
OK 
2016-01-01 
Time taken: 0.118 seconds, Fetched: 1 row(s) 
1

你可以嘗試使用to_date()在ISO格式的時間戳的日期部分:

SELECT 
    cust_id, 
    TO_DATE(CONCAT(SUBSTR(activitydate, 7, 4), '-', 
        SUBSTR(activitydate, 0, 2), '-', 
        SUBSTR(activitydate, 4, 2))) activity_date 
    type type_of_contact 
FROM repl_task 
WHERE 
    TO_DATE(CONCAT(SUBSTR(activitydate, 7, 4), '-', 
        SUBSTR(activitydate, 0, 2), '-', 
        SUBSTR(activitydate, 4, 2))) 
     BETWEEN '2014-01-01' AND '2017-01-01'; 

如果運行,但不是很高性能,那麼你應該考慮將在ISO格式的時間戳。將日期存儲爲文本或以非標準格式存儲文本,會對大多數數據庫造成損失。

+0

遇到內存問題 – sai

+0

正如我所提到的,您應該使用日期類型,或者您必須使用字符串,然後使用ISO格式。您也可以使用子查詢重新解釋我的答案。 –

相關問題