在 MySQL 中搜索日期时间

     2023-02-24     32

关键词:

【中文标题】在 MySQL 中搜索日期时间【英文标题】:Search datetime in MySQL 【发布时间】:2012-10-27 02:11:02 【问题描述】:

我有一个 MySQL 数据库,有一个表,其中 Time 的类型为 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# 代码:

string tableName = "ABCDFEGH";
string date = "05/10/2012 13:00:30";

var query = "SELECT * FROM " + tableName + " WHERE capTime > '" + date + "' LIMIT 0, 1";

var cmd = new MySqlCommand(query, connection);
MySqlDataReader dataReader = null;
try

dataReader = cmd.ExecuteReader();

我实在是太抱歉了。我犯了一个错误,查询必须是

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 for evveryone 试过 :)

【问题讨论】:

@PraveenKumar 你不能好好评论吗?为什么这么多!!! 【参考方案1】:

使用TIMESTAMPDIFF()

架构

CREATE TABLE ABCDFEGH (`right` varchar(3), `time` datetime);

INSERT INTO ABCDFEGH (`right`, `time`)
VALUES
    ('Yes', '2012-10-02 13:00:30'),
    ('No', '2012-10-15 13:00:30');

SQL 代码

SELECT * FROM ABCDFEGH
  WHERE TIMESTAMPDIFF(MINUTE, time, '2012-10-05 13:00:30') > 0
  LIMIT 0, 1

说明

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

小提琴:http://www.sqlfiddle.com/#!2/244cc/1 datetime

小提琴:http://www.sqlfiddle.com/#!2/063b3/1 varchar(50)

PS1: Time 可能是保留字。请避免使用它。否则将其与反引号 (`) 一起使用。

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

【讨论】:

时间为列名,该列的数据类型为 Nvachar(50)。它的值类似于“05/09/2012 20:53:40:843” 好的,更新答案。给我一点时间。 @BuiAkinori 你现在能检查一下吗? 我刚刚使用了你的新答案,我得到了一个“截断不正确的日期时间值:'04/13/2012 11:25:36:241'”的列表 @BuiAkinori 已添加架构和 DDL。【参考方案2】:

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

但如果没有,你可以使用STR_TO_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')
See SQLFiddle Demo

来源

STR_TO_DATE DATE Formats

更新 1

您的查询很容易受到SQL Injection 的影响。为了避免它

参数化您的查询

代码sn-p,

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
        
    

【讨论】:

我试了一下,得到了很多“Inccorect time value:'241' for function str_to_time' 241 是毫秒。你在你的查询中错过了那部分吗?【参考方案3】:

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

还可以使用相同格式的日期文字。

此建议的两个原因:首先,DATETIME takes only 8 bytes,而不是最多 150 字节,这是多字节 50 字符 varchar 的潜在大小。

其次,DATETIME 的排序顺序将与时间顺序相同。因此,如果您在 Time 列上创建索引,您的 > 比较可以从索引中受益。因此,您的查询会更快。

【讨论】:

@PraveenKumar,是的,我看到这个问题被标记为mysql。我的建议是针对 MySQL 的。 NVARCHAR 在 MySQL 中没有吗? @PraveenKumar,MySQL 支持 NVARCHAR 作为VARCHAR CHARACTER SET utf8 的别名。 我同意你的账单。你确定@PraveenKumar 吗?

使用 Jquery Datepicker 进行 PHP MYSQL 日期范围搜索

】使用JqueryDatepicker进行PHPMYSQL日期范围搜索【英文标题】:PHPMYSQLDateRangeSearchwithJqueryDatepicker【发布时间】:2013-10-1305:09:37【问题描述】:我尝试了几种不同的解决方案来解决我的问题,但我似乎找不到一个可行的方法。我正在... 查看详情

如何在 MySQL 中选择最近 30 天的日期?

...ENSUBDATE(NOW(),INTERVAL30DAY)ANDNOW();这可能吗?【问题讨论】:搜索是你的朋友。看这 查看详情

mysql日期时间格式使用c#

...-02-0320:10:50【问题描述】:我需要使用C#代码在mysql记录中搜索有关日期值的一些数据。我在c#中使用以下代码,但我找不到记录。请帮帮我。我的C#代码:Selectdistinctv.*fromVenvinnerjoinDesdonv.venid=d.venidandcast(d.despdateasd 查看详情

在 JSON mysql 中的两个 iso 日期之间搜索

】在JSONmysql中的两个iso日期之间搜索【英文标题】:searchbetweentwoisodateinJSONmysql【发布时间】:2021-10-0305:54:00【问题描述】:下面是我的JSON,它保存在mysql表的response列中"data":"submit":false,"lastName":"abc","firstName":"xys","metadata":,"createDa... 查看详情

在mysql查询中使用php time()函数计算两个日期之间的差异

...lquery【发布时间】:2013-01-2420:51:22【问题描述】:我已经搜索过这个,但我找不到任何东西。我有一个文章表。当我写新文章时,我使用phptime()函数将时间写入mysql表。我的桌子是id文章时间时间数据类型为IN 查看详情

在日期时间对象python中搜索

】在日期时间对象python中搜索【英文标题】:Searchingwithinadatetimeobjectpython【发布时间】:2017-01-1407:02:51【问题描述】:我试图定位日期时间对象的指定范围内的年份。我尝试过用几种不同的方式做一个for循环,但不幸的是我似乎... 查看详情

在 Java 中处理 MySQL 日期时间和时间戳

】在Java中处理MySQL日期时间和时间戳【英文标题】:HandlingMySQLdatetimesandtimestampsinJava【发布时间】:2011-03-2009:54:20【问题描述】:在java应用程序中,在使用日期时间和时间戳的混合使用MySQL数据库提取和输入日期信息方面,什么... 查看详情

在 PHP/MYSQL 中计算过滤器记录 [重复]

...题描述】:我有一个基于PHP/MYSQL的应用程序,其中有一个搜索区域,当您按日期搜索时,我会显示在这些日期之间有可用的属性/酒店。我还有一些其他过滤器,例如区域、酒店拥有的设施等。现在一切正常,但cutomer现在希望在... 查看详情

使用 mysql 和 php 搜索除日期字段外的整个表

】使用mysql和php搜索除日期字段外的整个表【英文标题】:searchentiretableexceptdatefieldsusingmysqlandphp【发布时间】:2014-07-3010:02:56【问题描述】:我有一张大表,想一次性搜索所有字段,但有些字段是日期,所以我创建的搜索在遇到... 查看详情

如何使用时区信息在 MySQL 中存储日期时间

】如何使用时区信息在MySQL中存储日期时间【英文标题】:HowtostoreadatetimeinMySQLwithtimezoneinfo【发布时间】:2013-11-1912:39:03【问题描述】:我有数千张在坦桑尼亚拍摄的照片,我想将每张照片的拍摄日期和时间存储在MySQL数据库中... 查看详情

Ruby活动记录在mysql中插入日期时间而不是时间

】Ruby活动记录在mysql中插入日期时间而不是时间【英文标题】:Rubyactiverecordinsertingdatetimeinsteadoftimeinmysql【发布时间】:2016-07-2100:07:44【问题描述】:RailsActiveRecord保存在插入查询中使用datetime,尽管mysql中的数据类型是time并且在... 查看详情

日期时间值如何存储在 mysql 中?

】日期时间值如何存储在mysql中?【英文标题】:Howdatetimevaluesarestoredinmysql?【发布时间】:2016-08-2413:09:44【问题描述】:我是数据库世界的新手。我正在从java程序发送一个日期时间值,例如“2016-04-2709:00:00”,以便将其保存到my... 查看详情

如何在 SqlAlchemy / Mysql 中存储时区感知日期时间值?

】如何在SqlAlchemy/Mysql中存储时区感知日期时间值?【英文标题】:HowtostoretimezoneawaredatetimevaluesinSqlAlchemy/Mysql?【发布时间】:2020-07-1915:58:51【问题描述】:我想在mysql数据库中存储一个Python时区感知日期时间属性。我使用SqlAlchemy... 查看详情

在 mysql 查询中计算日期和持续时间

】在mysql查询中计算日期和持续时间【英文标题】:Computedatesanddurationsinmysqlquery【发布时间】:2012-01-2321:00:26【问题描述】:我有一个示例表(table_name:track_task),如下所示:task_idstagelog_date----------------------------------------312011-0... 查看详情

在mysql中混合模式匹配和日期时间函数

】在mysql中混合模式匹配和日期时间函数【英文标题】:mixingofpatternmatchinganddatetimefunctionsinmysql【发布时间】:2012-02-0409:20:05【问题描述】:我在混合模式匹配和curdate()函数时遇到问题。下面是表结构,其中一些字段当前日期每... 查看详情

你如何在 MySql 中找出给定日期时间的 DayOfTheWeek?

】你如何在MySql中找出给定日期时间的DayOfTheWeek?【英文标题】:HowdoyoufindouttheDayOfTheWeekgivenadatetimeinMySql?【发布时间】:2009-12-0107:34:28【问题描述】:给定mysql5中的日期时间列,我想找出星期几?但是函数DAYOFWEEK为星期日返回1... 查看详情

如何在 MySQL 和 PHP 中处理日期和时间?

】如何在MySQL和PHP中处理日期和时间?【英文标题】:HowtohandledatesandtimesinMySQLandPHP?【发布时间】:2013-08-2908:52:19【问题描述】:我正在使用CodeIgniter2.1.x和MySQL。我在使用mysql列类型DATETIME和TIMESTAMP之间找到了很多建议,但我不确... 查看详情

MySql 5.7 版本不允许在日期时间字段中插入完整日期*

】MySql5.7版本不允许在日期时间字段中插入完整日期*【英文标题】:MySqlnotallowtoinsertfulldateindatetimefieldinversion5.7.*【发布时间】:2019-01-2108:23:51【问题描述】:只想通过配置更改此设置。不改变我的查询当前的SQL_MODE是STRICT_TRANS_TA... 查看详情