2013-05-28 83 views
0

我有這樣的選擇查詢的日期的查詢:選擇使用工作不正常

SELECT field_1, field_2, field_3, field_4 
FROM MyTable 
Where DateTimeField > '16/04/2013 00:00:00' ; 

它返回我​​,即使是那些16/04/2013之前。

我也tryed這一點:

SELECT dt_cadastro,descricao, projeto, funcionalidade 
FROM chamados 
Where dt_cadastro BETWEEN '16/04/2013 00:00:00' AND '28/05/2013 23:59:59'; 

同樣的結果... = \

這我試圖在我的MySQL管理器。

當我嘗試在我的應用程序,如:

string sql = @"SELECT proj.descricao AS projeto, func.descricao AS funcionalidade, clb.clube AS cliente, ch.descricao 
     FROM chamados ch 
     INNER JOIN projetos proj ON ch.projeto = proj.id 
     INNER JOIN funcionalidades func ON ch.funcionalidade = func.id 
     INNER JOIN clubes clb ON ch.clube = clb.id 
     WHERE ch.dt_cadastro BETWEEN @dt_inicial AND @dt_final"; 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = sql; 
    cmd.Parameter.Add(new MySqlParameter("@dt_inicial", MySqlDbType.DateTime)).Value = dt1 
    cmd.Parameter.Add(new MySqlParameter("@dt_final", MySqlDbType.DateTime)).Value = dt2 

然後我給你這個查詢到DataSet的結果。 但DataSet.Tables[0].Rows.Count總是< 0

這一切都是工作,但因爲我改變了我的Visual Studio 2010VS 2012一切開始不順心= \

UPDATE

它的工作都MySql managermy application。就像這樣:

SELECT proj.descricao AS projeto, func.descricao AS funcionalidade, clb.clube AS cliente, ch.descricao 
      FROM chamados ch 
      INNER JOIN projetos proj ON ch.projeto = proj.id 
      INNER JOIN funcionalidades func ON ch.funcionalidade = func.id 
      INNER JOIN clubes clb ON ch.clube = clb.id 
      WHERE ch.dt_cadastro BETWEEN '2013/04/28' AND '2013/05/28' 

但是,當我試圖把時間用它喜歡它不工作(HH:MM:SS,e.g 23:59:59)。 但它確定。
而我總是習慣,

MySqlCommand.Parameter.Add(new MySqlParameter("@date1", MySqlDbType.DateTime)).value = xxx 

,經常工作。我會以dd/mm/yyyy格式獲取日期。一直工作,現在我可以做什麼?上面的變量xxxstring,因爲我需要添加hh:mm:ss。我改變了DateTime這個變量並且工作了...... o.O爲什麼它習慣了我所做的,但現在它不再有效。

UPDATE 2
我發現了這個問題。
我沒有想法爲什麼這個,所以如果任何人都可以向我解釋原因,我會很感激!
我正在使用string變量類型在我的MySqlCommand.Parameter中通過。
我改變了類型DateTime和工作......沒有理想,爲什麼它停下來工作的方式是在第一個地方。但現在它正在工作。謝謝 !

回答

0

試試這個:

SELECT dt_cadastro,descricao, projeto, funcionalidade 
FROM chamados 
Where dt_cadastro BETWEEN CONVERT('16/04/2013 00:00:00', DATETIME) AND 
CONVERT('28/05/2013 23:59:59', DATETIME); 
+0

我試過了,現在我根本沒有得到任何結果... 我不認爲這是一個轉換問題,因爲當我使用'MySqlCommand.Paramter.Add ...'它已經這樣做了。或不 ? – Ghaleon

+0

'dt_cadastro'列的類型是什麼?時間戳? – Imreking

+0

這是'DateTime' – Ghaleon

0

請試試這個:

SELECT dt_cadastro,descricao, projeto, funcionalidade 
FROM chamados 
Where dt_cadastro BETWEEN '2013-04-16' AND '2013-05-28';
+0

同樣,它將所有行都返回給我; \ – Ghaleon

+0

表中有多少條記錄以及此查詢應該返回多少條記錄?另外,請檢查記錄中的最短日期和最長日期。 –

+0

我已經做了。有'24​​條記錄'。日期從'15/04/2013'到'08/05/2013'。 – Ghaleon

0
SELECT * FROM po_header WHERE (STR_TO_DATE(date_format(PO_DATE, '%d/%m/%Y'), '%d/%m/%Y %T') BETWEEN STR_TO_DATE(@param1, '%d/%m/%Y %T') AND STR_TO_DATE(@param2, '%d/%m/%Y %T')) 

我知道這也許看着混亂和怪異,但它的工作,我試圖把它縮短但它不起作用PO_DATE是MySql中的Date Date列 ,它可以正常工作DataSource的填充