Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL中的搜索日期时间_C#_Mysql_Datetime - Fatal编程技术网

C# MySQL中的搜索日期时间

C# MySQL中的搜索日期时间,c#,mysql,datetime,C#,Mysql,Datetime,我有一个MySQL数据库,有一个表,它的列时间类型是Nvachar(50),它的值是类似这样的“05/09/2012 20:53:40:843”*(月日期年小时:分钟:秒:毫秒)* 现在我想查询“10/05/2012 01:00:30 PM”之后的时间记录。 在进行查询之前,我用C#将代码转换为“05/10/2012 13:00:30”。 我的问题是: SELECT * FROM ABCDFEGH WHERE capTime > '05/10/2012 13:00:30' LIMIT 0,

我有一个MySQL数据库,有一个表,它的列时间类型是Nvachar(50)它的值是类似这样的“05/09/2012 20:53:40:843”*(月日期年小时:分钟:秒:毫秒)*

现在我想查询“10/05/2012 01:00:30 PM”之后的时间记录。 在进行查询之前,我用C#将代码转换为“05/10/2012 13:00:30”。 我的问题是:

SELECT * FROM ABCDFEGH WHERE capTime > '05/10/2012 13:00:30' LIMIT 0, 1
但我没有记录。那么请告诉我如何才能使其返回记录在上述时间之后有时间

更多信息我的C#代码:

我很抱歉。我犯了一个错误,这个问题一定是

SELECT * FROM ABCDFEGH WHERE capTime > '05/10/2012 13:00:30' LIMIT 0, 1
此查询成功返回我需要的记录:)

但是我怎么把它打错了

SELECT * FROM ABCDFEGH WHERE capTime > '05-10-2012 13:00:30' LIMIT 0, 1
再次抱歉,主题关闭。但是每个人都尝试了tks:)

使用
TIMESTAMPDIFF()
模式
SQL代码
解释
返回datetime_expr2–datetime_expr1,其中datetime_expr1和datetime_expr2是日期或日期时间表达式。一个表达式可以是日期,另一个表达式可以是日期时间;如有必要,日期值被视为具有时间部分“00:00:00”的日期时间。结果的单位(整数)由unit参数给出

小提琴:
datetime
小提琴:
varchar(50)
PS1:
时间
可以是保留字。请避免使用它。否则将其与反勾号(`)一起使用


PS2:时间的格式是
YYYY-MM-DD
而不是相反。

首先,为什么要将日期保存为
NVARCHAR
?如果您仍然能够将其更改为
DATETIME
datatype及其上的所有记录,那就更好了

但如果没有,您可以使用
STR\u TO\u DATE

SELECT  *
FROM    tableName
WHERE   STR_TO_DATE(`capTime`, '%m/%d/%Y %H:%i:%s:%x') > 
        STR_TO_DATE('05/10/2012 13:00:30', '%c/%d/%Y %H:%i:%s')
来源

更新1

并且您的查询易受
SQL注入
的攻击。避免

  • 参数化您的查询
代码段

string tableName = "ABCDFEGH";
string date = "05/10/2012 13:00:30";
String query =  "SELECT  * FROM  " + tableName + " WHERE   STR_TO_DATE(`capTime`, '%m/%d/%Y %H:%i:%s:%x') >  STR_TO_DATE(@dateHere, '%c/%d/%Y %H:%i:%s')";
using (MySqlConnection connection = new MySqlConnection("connectionStringHere"))
{
    using (MySqlCommand command = new MySqlCommand())
    {
        command.Connection = connection;
        command.CommandType = CommandType.Text;
        command.CommandText = query;
        command.Parameters.AddwithValue("@dateHere",date)
        MySqlDataReader dataReader = null;
        try
        {
            dataReader = cmd.ExecuteReader();
        }
        catch(MySqlException e)
        {
            // do something here
            // don't suppress the error
        }
    }
}

我建议使用
DATETIME
数据类型而不是NVARCHAR。以
YYYY-MM-DD HH:MM:SS
格式存储日期,即

也使用相同格式的日期文字

这一建议有两个原因:第一,不是最多150字节,而是50个字符的多字节varchar的潜在大小


其次,DATETIME的排序顺序将与时间顺序相同。因此,如果您在
Time
列上创建一个索引,您的
比较将受益于该索引。因此,您的查询速度会快得多。

时间是列名,此列的数据类型是Nvachar(50)。它的值类似于“05/09/2012 20:53:40:843”,好的,更新答案。给我一分钟。@BuiAkinori你现在能检查一下吗?我刚用了你的新答案,我得到了一个“被截断的不正确的日期时间值:'04/13/2012 11:25:36:241'”@BuiAkinori已经添加了模式和DDL。我尝试了这个,得到了很多结果“inccorrect time value:'241'函数str_to_time'241为毫秒。你错过了你查询中的那个部分吗?@PraveenKumar,是的,我看到这个问题被标记为
mysql
。我的建议是针对MySQL的。
NVARCHAR
在MySQL中不存在吗?@PraveenKumar,NVARCHAR在MySQL中作为
VARCHAR字符集utf8
的别名受支持。我同意你的观点。你确定那个@PraveenKumar?@PraveenKumar你就不能好好评论一下吗?为什么有这么多的
SELECT * FROM ABCDFEGH
  WHERE TIMESTAMPDIFF(MINUTE, time, '2012-10-05 13:00:30') > 0
  LIMIT 0, 1
SELECT  *
FROM    tableName
WHERE   STR_TO_DATE(`capTime`, '%m/%d/%Y %H:%i:%s:%x') > 
        STR_TO_DATE('05/10/2012 13:00:30', '%c/%d/%Y %H:%i:%s')
string tableName = "ABCDFEGH";
string date = "05/10/2012 13:00:30";
String query =  "SELECT  * FROM  " + tableName + " WHERE   STR_TO_DATE(`capTime`, '%m/%d/%Y %H:%i:%s:%x') >  STR_TO_DATE(@dateHere, '%c/%d/%Y %H:%i:%s')";
using (MySqlConnection connection = new MySqlConnection("connectionStringHere"))
{
    using (MySqlCommand command = new MySqlCommand())
    {
        command.Connection = connection;
        command.CommandType = CommandType.Text;
        command.CommandText = query;
        command.Parameters.AddwithValue("@dateHere",date)
        MySqlDataReader dataReader = null;
        try
        {
            dataReader = cmd.ExecuteReader();
        }
        catch(MySqlException e)
        {
            // do something here
            // don't suppress the error
        }
    }
}