2013-11-27 61 views
1

之間的日曆我有一個叫萬年曆錶,該表中我有這行: - 日 - 月 - 年 選擇與CONCAT和

爲什麼呢?因爲我需要它嘿。

所以,問題是,當我想在搜索一年diferent一個日期(這是確定的同一年),例如:之間

日:31-12-2013和2014年1月1日,所以我有一個查詢:

SELECT * FROM calendar WHERE concat(year,' - ',month,' - ',day)BETWEEN'2013-1-30'AND'2013-1-31';

但是,在同一年該查詢搜索並顯示另一個月(我在我的分貝730天),而不是2014年

所以,我很困惑,因爲,我怎麼能Concat的行和搜索之間? 希望你能幫助我理解,對不起我的英文。

謝謝大家。

+0

這取決於關於你放的數據類型!日期或字符串! – ktaria

+0

你可以擴展你的問題嗎?你想搜索'不同年份的日期'?一個日期,日期範圍? – Tommassiov

回答

0

使用str_to_date

SELECT * FROM calendar 
WHERE str_to_date(concat(year,'-',month,'-',day),'%Y-%m-%d') 
      BETWEEN '2013-1-30' AND '2013-1-31'; 

sqlfiddle demo

+0

謝謝,它的工作原理!,但正如我評論,當我運行查詢時,這也顯示了另外幾個月(顯示我需要的信息),以及如何對我的查詢說我不想看到另一個月。 – SundayGirl

+0

@SundayGirl。這不能顯示其他幾個月。這個查詢之外你必須有一些奇怪的東西搞亂你的結果。你可以在[sqlfiddle](http://www.sqlfiddle.com)上顯示你的表格,看看它在做什麼? –

+0

@SundayGirl。看到這個小提琴看到它在兩年之間工作:http://sqlfiddle.com/#!2/bbac06/1 –

0

嘗試

SELECT * FROM calendar WHERE DATE(CONCAT(year,'-',month,'-',day)) BETWEEN '2013-1-30' AND '2013-1-31'; 

我也很好奇,爲什麼你「需要」來存儲年,月,日三個獨立的領域,而不是一個單一的日期字段?

我認爲,年,月,日也可保留在MySQL中的關鍵字,所以你可能需要做

SELECT * FROM `calendar` WHERE DATE(CONCAT(`year`,'-',`month`,'-',`day`)) BETWEEN '2013-1-30' AND '2013-1-31'; 
+0

謝謝,正如我在同一年搜索時發表的評論一樣,它可行,但在不同的一年結果是不同的,我的意思是,顯示我需要的結果,但也顯示了另一個不必要的月份。 但謝謝你的回答! – SundayGirl

+0

你可以發佈你使用的數據嗎?我的代碼應該可以工作(和Filipe Silva一樣) –

+0

這個在代碼中是用西班牙文對我來說的:http://sqlfiddle.com/#!2/a0a40/1 – SundayGirl