我有这个选择查询:
SELECT field_1, field_2, field_3, field_4
FROM MyTable
Where DateTimeField > '16/04/2013 00:00:00' ;
它会返回all the rows
,即使是16/04/2013
之前的那些。
我也试过这个:
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 Manager上尝试的。
当我在我的应用程序上尝试时:
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 2010
更改为VS 2012
后,一切都开始出错= \
更新
它同时适用于MySql manager
和my 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,例如23:59:59)。
虽然没问题。
我一直都在用,
MySqlCommand.Parameter.Add(new MySqlParameter("@date1", MySqlDbType.DateTime)).value = xxx
并且始终有效。我将以dd/mm/yyyy
格式获取日期。一直工作,现在我该怎么办?上面的变量xxx
为string
,因为我需要添加hh:mm:ss
。我为DateTime
变量更改了这个并且工作了... o.O为什么它曾经按照我的方式工作,但现在它不再有效。
更新2
我发现了问题。
我没有IDEA为什么这样,所以如果有人能向我解释原因,我会很感激!
我使用string
变量类型来传递MySqlCommand.Parameter
我将类型改为DateTime
并且工作了......没有想法为什么它停止工作的方式就像它在第一时间一样。但现在它正在发挥作用。谢谢!
答案 0 :(得分: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);
答案 1 :(得分:0)
请试一试:
SELECT dt_cadastro,descricao, projeto, funcionalidade FROM chamados Where dt_cadastro BETWEEN '2013-04-16' AND '2013-05-28';
答案 2 :(得分: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 它适用于DataSource的Fill