2013-05-28 57 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的填充