精华内容
下载资源
问答
  • mybatis-plus 时间字段比较

    千次阅读 2020-12-16 23:20:15
    mybatis-plus 时间字段比较,默认lt/gt/ge时间比较时无效: 解决: LambdaQueryWrapper<?> queryWrapper = Wrappers.<ConstantsRetention>query().lambda(); String strEnd= DateFormatUtils.format...

    mybatis-plus 时间字段比较,默认lt/gt/ge时间比较时无效:

    解决:

    LambdaQueryWrapper<?> queryWrapper = Wrappers.<ConstantsRetention>query().lambda();
            
    String strEnd= DateFormatUtils.format(dto.getEndTime(),"yyyy-MM-dd HH:mm:ss");
    
    String start = DateFormatUtils.format(dto.getStartTime(),"yyyy-MM-dd HH:mm:ss");
    
    queryWrapper.apply("UNIX_TIMESTAMP(tabulation_time) >= UNIX_TIMESTAMP('" + start + "')");
    
    queryWrapper.apply("UNIX_TIMESTAMP(tabulation_time) < UNIX_TIMESTAMP('" + strEnd + "')");

     

    展开全文
  • mysql 时间字段性能比较

    千次阅读 2018-03-30 13:54:10
    MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较正 文:在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int、timestamp、datetime三种类型来存储,那么这三种类型哪一种用来...

    MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较

    正 文:

    在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int、timestamp、datetime三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高,效率好呢?飘易就这个问题,来一个实践出真知吧。



    MYSQL版本号:5.5.19


    建立表:

    CREATE TABLE IF NOT EXISTS `datetime_test` (
      `id` int(11) NOT NULL,
      `d_int` int(11) NOT NULL DEFAULT '0',
      `d_timestamp` timestamp NULL DEFAULT NULL,
      `d_datetime` datetime DEFAULT NULL
    ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8;
    ALTER TABLE `datetime_test`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=1;

    插入100万条测试数据:

    <?php header( 'Content-Type: text/html; charset=UTF-8' );
    set_time_limit(300); //最大执行时间这里设置300秒
    
    //连接数据库
    $pdo = new PDO("mysql:host=localhost;dbname=test","root","123"); 
    
    for ($i = 1; $i <= 1000000; $i++) { 
    	$d_int=$i;
    	$pdo->exec("insert into datetime_test(d_int,d_timestamp,d_datetime) 
    		values($d_int,FROM_UNIXTIME($d_int),FROM_UNIXTIME($d_int))");
    }

    取中间的20万条做查询测试:

    SELECT FROM_UNIXTIME(400000), FROM_UNIXTIME(600000)
    1970-01-05 23:06:40, 1970-01-08 06:40:00


    第一种情况,MyISAM引擎, d_int/d_timestamp/d_datetime这三个字段都没有索引


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int >400000 AND d_int<600000
    查询花费 0.0780 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00')
    查询花费 0.0780 秒

    效率不错。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00'
    查询花费 0.4368 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000
    查询花费 0.0780 秒

    对于timestamp类型,使用UNIX_TIMESTAMP内置函数查询效率很高,几乎和int相当;直接和日期比较效率低。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00'
    查询花费 0.1370 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000
    查询花费 0.7498 秒

    对于datetime类型,使用UNIX_TIMESTAMP内置函数查询效率很低,不建议;直接和日期比较,效率还行。


    第二种情况,MyISAM引擎, d_int/d_timestamp/d_datetime这三个字段都有索引


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int >400000 AND d_int<600000
    查询花费 0.3900 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00')
    查询花费 0.3824 秒

    对于int类型,有索引的效率反而低了,飘易的猜测是由于设计的表结构问题,多了索引,反倒多了一个索引查找。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00'
    查询花费 0.5696 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000
    查询花费 0.0780 秒

    对于timestamp类型,有没有索引貌似区别不大。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00'
    查询花费 0.4508 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000
    查询花费 0.7614 秒

    对于datetime类型,有索引反而效率低了。


    第三种情况,InnoDB引擎, d_int/d_timestamp/d_datetime这三个字段都没有索引


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int >400000 AND d_int<600000
    查询花费 0.3198 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00')
    查询花费 0.3092 秒

    InnoDB引擎的查询效率明细比MyISAM引擎的低,低3倍+。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00'
    查询花费 0.7092 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000
    查询花费 0.3160 秒

    对于timestamp类型,使用UNIX_TIMESTAMP内置函数查询效率同样高出直接和日期比较。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00'
    查询花费 0.3834 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000
    查询花费 0.9794 秒

    对于datetime类型,直接和日期比较,效率高于UNIX_TIMESTAMP内置函数查询。


    第四种情况,InnoDB引擎, d_int/d_timestamp/d_datetime这三个字段都有索引


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int >400000 AND d_int<600000
    查询花费 0.0522 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_int>UNIX_TIMESTAMP('1970-01-05 23:06:40') AND d_int<UNIX_TIMESTAMP('1970-01-08 06:40:00')
    查询花费 0.0624 秒

    InnoDB引擎有了索引之后,性能较MyISAM有大幅提高。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_timestamp>'1970-01-05 23:06:40' AND d_timestamp<'1970-01-08 06:40:00'
    查询花费 0.1776 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_timestamp)>400000 AND UNIX_TIMESTAMP(d_timestamp)<600000
    查询花费 0.2944 秒

    对于timestamp类型,有了索引,反倒不建议使用MYSQL内置函数UNIX_TIMESTAMP查询了。


    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE d_datetime>'1970-01-05 23:06:40' AND d_datetime<'1970-01-08 06:40:00'
    查询花费 0.0820 秒
    SELECT SQL_NO_CACHE count(id) FROM `datetime_test2` WHERE UNIX_TIMESTAMP(d_datetime)>400000 AND UNIX_TIMESTAMP(d_datetime)<600000
    查询花费 0.9994 秒

    对于datetime类型,同样有了索引,反倒不建议使用MYSQL内置函数UNIX_TIMESTAMP查询了。


    【总结】:

    对于MyISAM引擎,不建立索引的情况下(推荐),效率从高到低:int > UNIX_TIMESTAMP(timestamp) > datetime(直接和时间比较)>timestamp(直接和时间比较)>UNIX_TIMESTAMP(datetime) 。


    对于MyISAM引擎,建立索引的情况下,效率从高到低: UNIX_TIMESTAMP(timestamp) > int > datetime(直接和时间比较)>timestamp(直接和时间比较)>UNIX_TIMESTAMP(datetime) 。


    对于InnoDB引擎,没有索引的情况下(不建议),效率从高到低:int > UNIX_TIMESTAMP(timestamp) > datetime(直接和时间比较) > timestamp(直接和时间比较)> UNIX_TIMESTAMP(datetime)。


    对于InnoDB引擎,建立索引的情况下,效率从高到低:int > datetime(直接和时间比较) > timestamp(直接和时间比较)> UNIX_TIMESTAMP(timestamp) > UNIX_TIMESTAMP(datetime)。


    一句话,对于MyISAM引擎,采用 UNIX_TIMESTAMP(timestamp) 比较;对于InnoDB引擎,建立索引,采用 int 或 datetime直接时间比较。


    展开全文
  • mysql和sql时间 字段比较大小的问题

    万次阅读 2011-01-19 10:18:00
    不能用两个字符串比较的小的方法来做。例如:‘2010-10-20’ > ‘2010-12-15’正解:都是 , 后面的时间- 前面的时间mysqlselect count(*) from table where timestampdiff(hour,'2008-08-08 12:00:00','2008-08...

    不能用两个字符串比较的小的方法来做。例如:‘2010-10-20’ > ‘2010-12-15’

    正解:都是  ,   后面的时间- 前面的时间

    mysql

    select count(*) from table where  timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00') > 0

     

    server sql

    select count(*) from table where DATEDIFF ([second], '2004-09-18 00:00:18', '2004-09-18 00:00:19')  > 0

     

    1.           因此必须用 sql 的时间函数和字符串转化进行比较。

    对于 mysql

    (1)       如果数据库表中的字段是日期 格式的

    select name,cdate  from user where     DATEDIFF('2010-1-10' , sysdate()) > 0

    也可以用(这里会自动的将字符串转化成日期格式然后想减,返回天数,前减后 ,小于 0 说明前面的日期小):

    select name,cdate  from user where   DATEDIFF('2010-1-10' ,'2010-1-11') ;

    可以不用日期和字符串函数的转化就可以了。

    msql 的转换函数: CAST('2010-10-10' AS DATE)

    BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
    示例:

    SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
    SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);

    mysql 返回两个时间的秒的格式为 :

    select DATEDIFF('2010-1-10' ,'2010-1-11');

    select unix_timestamp('2008-1-1 11:20:50') - unix_timestamp('2008-1-1 12:10:20');

    select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00');

    select timestampdiff(second,'2008-08-01','2008-08-08'); 

    (2)       如果数据库表中的字段是字符 格式的

    如果上面的可以自动的转换的话我们就没有必要谈 是字符格式的问题了。

    对于 SQL

    server sql 相对来说就比较宽泛一些了可以得到相差的时间精确到秒了。 ( 无所谓字符 还是时间格式了 )

    SELECT DATEDIFF([year], GETDATE(), '2004-09-18')   返回值: -6 ,说明是后减前 mysql 相反的。

    select datediff(day,getdate(),'2004-09-18')

    SELECT DATEDIFF([hour], '2004-09-01', '2004-09-18')

    SELECT DATEDIFF([second], '2004-09-18 00:00:18', '2004-09-18 00:00:19') 

    展开全文
  • 若Access数据库中的字段类型是 日期/时间, 怎么比较大小呢。  我自己 也困惑了好久。  查询资料。 找到了 2 个 方法:  1,使用函数 DateDiff  2, 直接在SQL 语句中比较。  我用的是第二种方法。格式如下: ...

            若Access数据库中的字段类型是 日期/时间, 怎么比较大小呢。

            我自己 也困惑了好久。

    ------------------------------解决方法

           查询资料。 找到了 2 个 方法:

           1,使用函数 DateDiff

           2, 直接在SQL 语句中比较。

           我用的是第二种方法。格式如下:

    select * from 表名 where 日期字段列名>#指定日期#

         指定时间段查询方式:

    string sqlstr1 = "SELECT * FROM test WHERE 时间 > #"+time1Str+"# AND 时间 < #"+time2Str+"#";

    ------------------------------举例

         例如:

    string sqlStr = "SELECT * FROM test WHERE 时间 > #15/10/20# AND 时间 < #15/11/01#";



         看看我的数据库中的数据:

       再看看查询结果:


        这样就能很方便的查询信息啦。 

    展开全文
  • Mysql datatime类型 日期字段比较大小

    千次阅读 2019-07-09 17:52:36
    //转换成时间戳比较 SELECT * FROM 表名 WHERE 1 =1 and unix_timestamp(日期字段名) >= unix_timestamp('2019-07-12') //转换成整数比较 SELECT * FROM 表名 WHERE 1 =1 and TO_DAYS(日期字段名) >=...
  • 在实际开发中,每条数据的创建时间和修改时间,尽量不需要应用程序去记录,而由数据库获取当前时间自动记录创建时间,获取当前时间自动记录修改时间。 2、创建语句 (1)–添加CreateTime 设置默认时间 CURRENT_...
  • sql 当前时间跟数据库字段比较

    千次阅读 2015-09-10 14:48:51
    mysql 时间比较
  • Oracle表添加时间字段 在执行update、insert操作时,时间字段会自动更新时间 STUDY表结构如下: SQL> desc study; Name Null? Type ------- ----------------- -------- ---------------------------- ...
  • Postgresql中时间大小比较

    千次阅读 2020-07-29 15:21:19
    方法:使用timestamp进行比较 如果字段是varchar类型,将其先转化为timestamp类型,转化方法: to_timestamp(字段名,'YYYY-MM-DD') 比较时,直接使用>或者进行比较。 将普通的字符串转化为timestamp的方法: ...
  • SELECT * from table ...TIMESTAMPDIFF函数,需要三个参数,type是比较的类型,可以比较FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR几种类型,pretime是前一个时间比较时用后...
  • 在数据表中,要记录每条数据是什么时候创建的,什么时候修改的,不需要手动添加特意记录,而由数据数据库获取当前时间自动记录创建和修改时间; –添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE ...
  • 时间字段加索引

    千次阅读 2020-03-24 18:29:58
    文章目录为时间字段加索引(待更进)一、问题1、描述:日期不一致2、原因:时区不同3、解决方法: 时区修改二、datetime和varchar类型效率比较1、背景2、开始三、时间字段加索引1、聚集索引2、非聚集索引3、时间字段...
  • oracle修改时间字段

    千次阅读 2020-08-06 17:48:51
    update test表 set 字段=to_date('2020-05-31','yyyy-MM-dd') where aae001=6014 and aaa063 = to_date('2020-05-01','yyyy-MM-dd') ; update test表 set 字段=to_date('2020-06-30','yyyy-MM-dd') where 字段= to_...
  • sql server中对日期字段比较方式有多种,介绍几种常用的方式: 用northwind库中的employees表作为用例表。 1.between...and语句的使用: 说明:between...and用于指定测试范围 看以下实例: 执行sql语句“SELECT...
  • 应用场景: 1、在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取...1、将字段类型设为 TIMESTAMP 2、将默认值设为 CURRENT_TIMESTAMP 举例应用: 1、MySQL 脚本实现用...
  • Sqlite数据库对时间进行比较SQL语句

    万次阅读 2016-10-13 14:53:00
    开发工作,在于不断积累,总结经验,持续学习。 最近项目中有这样的需求: 1、删除当前月份前三个月...由于之前对数据库中对时间的操作比较少,所以很生疏,也是找了很多网络资源才实现了功能,也学到了很多,接下来
  • mysql 修改 创建时间字段和修改时间字段 创建时间为:当前插入时间 修改时间:修改完成后的当前时间 mysql 修改创建时间和修改时间字段 创建时间:alter table userinfo modify exitTime timestamp no null ...
  • 时间字段加索引

    万次阅读 2018-11-14 22:05:20
     很多人认为只要把任何字段加进聚集索引,就能提高查询速度,也有人感到迷惑:如果把复合的聚集索引字段分开查询,那么查询速度会减慢吗?带着这个问题,我们来看一下以下的查询速度(结果集都是25万条数据):...
  • mysql设置update时间字段自动更新

    千次阅读 2019-02-21 13:50:56
    数据库表设计阶段中有个最佳实践,需要在每个表中预留创建时间create_time, 修改时update_time字段 阿里巴巴编码规约中建议命名为gmt_create,gmt_modifie,并且类型datetime 其中,create_time字段在一般开发中会...
  • MYSQL 存储时间字段类型

    千次阅读 2019-11-06 18:53:04
    MYSQL时间数据类型对比 MYSQL有5种表示时间值的日期和时间类型,分别为 DATE,TIME,YEAR,DATETIME,TIMESTAMP。(TIMESTAMP类型有专有的自动更新特性) 如何选择? 1.只需要年份,则选用 YEAR 类型 2.只需要年月...
  • MySQL 更新时间字段命令

    千次阅读 2018-12-16 19:02:16
    改变时间:减少六小时 要改变的某一行id:3 update date set startTime=date_sub(startTime,interval 6 HOUR) where id=3; 定义和用法 DATE_ADD() 函数向日期添加指定的时间间隔。 DATE_SUB() 函数向日期减少指定的...
  • TIMESTAMPDIFF函数,需要三个参数,type是比较的类型,可以比较FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR几种类型,pretime是前一个时间比较时用后一个时间
  • MySQL日期时间字段

    千次阅读 2018-06-13 13:32:38
    MySQL日期时间字段 mysql支持的日期时间类型有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。 几种类型比较如下: DATETIME DATETIME 用于表示 年月日 时分秒,是 DATE和TIME 的组合,并且记录的年份(见上表)...
  • Mysql时间加减函数为date_add()、date_sub() 定义和用法 DATE_ADD() 函数向日期添加指定的时间间隔。 DATE_SUB() 函数向日期减少指定的时间间隔。语法 DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,...
  • 这里的需求是:插入数据之后没有时间字段,如何查看每条记录的插入时间; 用法:创建表的时候记得加入:create table maclean_rd(t1 int,t2 timestamp) rowdependencies; 然后根据scn时间查询表数据插入时间 ...
  • mysql中的时间字段用什么数据类型

    万次阅读 2018-06-14 09:38:07
    Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。 按照标准的SQL,不允许其他格式。在UPDATE表达式以及SELECT语句的WHERE子句中应使用该格式。例如: mysql> SELECT * ...
  • mysql字段创建时间和更新时间

    千次阅读 2019-05-09 09:21:40
    设计mysql表时,希望create_time为创建时的时间,update_time为更新时的时间, `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NULL DEFAULT CURRENT_...
  • MySql修改时间字段的函数

    千次阅读 2018-09-20 14:08:25
    DATE_ADD() 函数向日期添加指定的时间间隔。 DATE_SUB() 函数向日期减少指定的时间间隔。 语法 DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) date 参数是合法的日期表达式。 expr参数是您...
  • Oracle 数据库插入时间字段

    千次阅读 2018-05-16 11:19:33
    后台类public void doSave(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("...
  • mySql字段设置varchar的时间比较

    千次阅读 2017-05-14 23:26:11
    select * from table_name where create_time date('2017-05-12') ;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,072,010
精华内容 428,804
关键字:

时间字段比较