2014-04-10 5 views
12

Ich bin für dieses Problem zu umgehen oder hive Datumsfunktionen suchen, den Tag der Woche gibt,Hive Datum Funktion Tag der Woche zu erreichen

Sunday - 1 
Monday - 2 
Tuesday - 3 
Wednesday - 4 
Thursday - 5 
Friday - 6 
Saturday - 7 

Anforderung im Detail: Ich bin für eine Funktion suchen, Datum nimmt Zeichenfolge (YYYYMMDD) als Eingabe und gibt den Wochentag gemäß obiger Tabelle aus.

+0

Sie müssen UDF für diese schreiben. Können Sie Ihre Anforderung erklären? Was ist der Datentyp dieser Spalte? –

Antwort

-3

Wie gesagt, Sie müssen eine UDF schreiben, die eine Zeichenkette als Parameter akzeptiert und eine Zeichenkette zurückgibt. Innerhalb der UDF müssen Sie diese Schritte tun:

1.) Analysieren Sie die Eingabezeichenfolge mit Simple (JJJJMMTT)

2.) den Code unten Verwenden Sie den Tag der Woche zu bekommen:

Calendar c = Calendar.getInstance(); 
c.setTime(yourDate); 
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); 

3.) Verwenden Sie diesen dayOfWeek Wert in einer case-Anweisung Ihren Wochentag String zu erhalten und diese Zeichenfolge zurück.

Hoffe das hilft ... !!!

+0

Danke Es hilft – user3279189

+1

Völlig unnötig, Ihre eigene UDF dafür zu schreiben. – swdev

8

select pmod(datediff(your_date,'1900-01-07'),7) + 1 as WeekDay from your_table

  • beliebiges Startdatum gepflückt (1900-01-07)
  • die Mod 7 Tage der Woche berechnet (plus 1 bei 1 statt Null zu beginnen)
34

Betrachten unter Verwendung from_unixtime(your date,'u') - dies wird Tag Anzahl der Woche beginnend von Monday=1 zurückgeben. Wenn Sie das Datum nicht in Unix-Zeit-Format ist, können Sie die folgende statt:

from_unixtime(unix_timestamp('20140112','yyyyMMdd'),'u') 

siehe: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html für einfache Datumsformat-Dokumentation.

+0

Es funktioniert nur von Java 7, auf Java 6 schlägt es fehl (keine 'u' Option in http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html). –

+2

Wenn Sie die Textversion des Wochentags (d. H. "Mon", "Di" usw.) möchten, können Sie anstelle von ''u'' auch'' E'' verwenden. – willwest

+1

Montag ist 1, Sonntag ist 7 –

4

können Sie jetzt date_format (Hive 1.2) verwenden:

hive> select date_format('2016-12-01' ,'u'); 
OK 
4