2016-05-19 57 views
0

我正在尋找在MySQL的方式,以一個整數(0-6)轉換爲一週的某一天,是這樣的:MySQL DAYOFWEEK()反向嗎?

EXAMPLE_FUNCTION(3) = Wednesday. 

DAYOFWEEK(date)功能需要一個日期和給你一個數0- 6對應於星期幾(0 =星期日,6 =星期六),所以我正在尋找與此相反的情況。

+0

它不會扭轉。第一個'int f(date)',第二個'string f(int)'。 'elt(w + 1,...)'做了一份工作。 –

+0

https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_elt – CBroe

+0

這將是一個非常簡單的函數來寫自己... – WillardSolutions

回答

3
DROP FUNCTION IF EXISTS DAYNUMBER; 
CREATE FUNCTION DAYNUMBER(s INT) RETURNS VARCHAR(10) 
RETURN elt(s+1, 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); 

測試:

SELECT DAYNUMBER(1) 

輸出 '星期一'。

+0

這是矯枉過正。使用原生SQL函數,如'ELT(n + 1'星期日','星期一','星期二',...)' – spencer7593

+0

我是SQL新手,所以我不知道那個函數存在但是,這是一個更好的方式來做到這一點。感謝您提出這個問題。我會更新我的答案。 – mathmorales

+0

'daynumber(0)'應該返回'星期日'以包含'dayofweek' –

1

DAYOFWEEK功能應該是有所幫助的位置:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayname

唯一的缺點是,它需要一個日期作爲輸入,而不是每天數。但是,這應該很容易補救。從一個你知道星期天的任意日期開始(如2016-01-03)。然後你的一天號碼。現在您的日期與您的日數相同,您可以通過DAYOFWEEK函數運行該日期。

DAYNAME(ADDDATE("2016-01-03", :day)) 

運行下面的樣本見自己:

SELECT DAYNAME(ADDDATE("2016-01-03", "3")) # Wednesday 
SELECT DAYNAME(ADDDATE("2016-01-03", "0")) # Sunday 
+0

謝謝,這個答案也適用,而且它更短。唯一的小缺點是必須在ADDDATE()函數中使用該日期。 – origamifreak2

+0

你是絕對正確的,那個日期在那裏讓我覺得有點不對勁。你可以把它封裝在一個函數中(像@mathmorales那樣)來隱藏它,但是仍然...這不是我通常留給mySql的東西。我嚴格使用數據庫進行數據存儲和查詢,並將所有業務邏輯保存在我的應用程序代碼中。但是,嘿,我也瞭解了今天mysql中的函數和elt,誰知道它何時可以派上用場;-) – Pevara