2017-04-17 2 views
0

Wie kann ich bestimmtes Datumsformat in Hive-Abfrage übereinstimmen, da ich diese Zeilen mit anderen Datumsformat als max Zeilen erhalten muss.Hive-Datumsformat entspricht

Eg. Mein max Zeilen haben Datumsformat MM/tt/und ich habe alle Zeilen aufzulisten andere als die oben Format

+----------------------------+--------------------------+--------------------+-----------+ 
| AllocationActBankAccountID | GiftCardActBankAccountID | UpdateTimeStampUtc | Date | 
+----------------------------+--------------------------+--------------------+-----------+ 
|       14 |      14 | 41:39.8   | 4/19/2016 | 
|       14 |      14 | 37:16.4   | 4/20/2016 | 
|       14 |      14 | 52:15.2   | 4/21/2016 | 
|       14 |      14 | 52:15.2   | 2/11/2019 | 
|       14 |      14 | 52:15.2   | 12-Feb-19 |* 
|       14 |      14 | 41:39.8   | 2/13/2019 | 
+----------------------------+--------------------------+--------------------+-----------+ 

Ich möchte bekommen * gekennzeichneten Daten (Datum = 12-Feb-19)

+0

Warum bist du Zeichenkette mit nicht-ISO-Format und nicht Datum/Zeitstempel-Typen verwenden? –

+0

es ist nach der Datei, die wir erhalten –

+1

Ich kann nicht einmal anfangen zu beschreiben, wie schlecht ist das, was Sie hier versuchen wollen. Es ist, als ob das Konzept der Integration nie existiert hätte. –

Antwort

0
select * 
from mytable 
Where date not rlike '^([1-9]|1[0-2])/([1-9]|[1-2][0-9]|3[0-1])/(19|20)\\d{2}$' 

oder

select * 
from mytable 
Where not 
     (
      date rlike '^\\d{1,2}/\\d{1,2}/\\d{4}$' 
     and cast(split (date,'/')[0] as int) between 1 and 12 
     and cast(split (date,'/')[1] as int) between 1 and 31 
     and cast(split (date,'/')[2] as int) between 1900 and 2099 
     ) 

oder

select date 
from mytable 
Where coalesce(from_unixtime(to_unix_timestamp(date,'M/d/y')),'0000-01-01') 
      not between date '1900-01-01' and date '2099-12-31'