C# MySQL中的搜索日期时间
我有一个MySQL数据库,有一个表,它的列时间类型是Nvachar(50),它的值是类似这样的“05/09/2012 20:53:40:843”*(月日期年小时:分钟:秒:毫秒)* 现在我想查询“10/05/2012 01:00:30 PM”之后的时间记录。 在进行查询之前,我用C#将代码转换为“05/10/2012 13:00:30”。 我的问题是: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,
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
}
}
}