2014-11-14 49 views
0

我有一個日期字段在蜂巢表如下格式:提取物天(即「星期六」) - HQL

'YYYY-MM-DD' 

我正在尋找一個函數(讓我們又稱之爲 - 將被我發現的功能dayofweek())將返回'週五'當今日期運行。因此,要明確清晰,這個查詢:

SELECT DAYOFWEEK(DT.ds), DT.ds 
FROM dateTable DT 
WHERE DT.ds = '2014-11-14' 
LIMIT 1 

將返回該值:

'friday' '2014-11-14' 

任何幫助,將不勝感激:)谷歌搜索尚未徒勞的。

Clark

P.S.對this question的迴應對我無效......錯誤返回:'Invalid function 'dayofweek''

+0

以下網址具有蜂巢經營者名單 - https://cwiki.apache.org/confluence/display/Hive/LanguageManual + UDF#LanguageManualUDF-StringFunctions – Clark 2014-11-14 18:57:14

+0

不介意以某種方式計算星期幾,但不能想象一個合理簡單的方法來做到這一點。 – Clark 2014-11-14 18:59:14

+0

你有沒有試過DATENAME(DW,DT.ds)? – CactusCake 2014-11-14 21:37:15

回答

0

如果您關心一個等式,那麼以下是C代碼,希望它足夠簡單,可以轉換爲SQL。

重要的是使用整數數學。

#define MARCH 3 
int dow_Sunday0(int year, int month, int day) { 
    if (month < MARCH) { 
    month += 12; 
    year--; 
    } 
    // Add days for each year and leap years 
    day += year + year/4 - year/100 + year/400; 
    // add days for the month 
    day += month*30 + ((month-MARCH)*39 + 25)/64; 
    // modulo 7 
    return (day+3)%7; 
} 

這適用於有效的Gregorian calendar日期。

0

使用DAYNAME()功能,如:

mysql> select dayname('2014-11-14'); 
+-----------------------+ 
| dayname('2014-11-14') | 
+-----------------------+ 
| Friday    | 
+-----------------------+ 
1 row in set (0.00 sec) 

所以,您的查詢就會變成:

SELECT DAYNAME(DT.ds), DT.ds 
FROM dateTable DT 
WHERE DT.ds = '2014-11-14' 
LIMIT 1 
相關問題