精华内容
下载资源
问答
  • 考虑这样一种场景:按时间段拉取给定时间段的内容,这时,我们就得使用日期类型的比较了。表结构:tablename_tbl+-----------------+--------------+------+-----+-------------------+----------------+| Fi...

    我们知道,mysql里边,日期类型有很多表现形式,date, datetime,timestamp等类型。考虑这样一种场景:

    按时间段拉取给定时间段的内容,这时,我们就得使用日期类型的比较了。

    表结构:tablename_tbl

    +-----------------+--------------+------+-----+-------------------+----------------+

    | Field    |   Type |   Null |   Key |   Default |   Extra |

    +-----------------+--------------+------+-----+-------------------+----------------+

    | id    |   mediumint(8)   | NO    | PRI   | NULL    |   auto_increment |

    | title    | varchar(40)    | NO    |    | NULL |    |

    | content  | mediumtext    | NO    |    | NULL |    |

    | addtime  | timestamp    | NO |    |   CURRENT_TIMESTAMP |    |

    其中addtime为timestamp类型的,现在我们要拉去过去三小时内新增的记录,我们可以采取比较unix时间戳以及比较日期这两种方式实现;

    首先看第一种:unix时间戳比较

    Mysql内置函数:UNIX_TIMESTAMP()

    若无参数调用,则默认返回一个 从 '1970-01-01 00:00:00' 到当前时刻的秒数(无符号整数)。若用date 来调用 unix_timestamp(),它会返回从 '1970-01-01 00:00:00' 到 date表示的时刻为止的秒数;date 可以是一个 date 字符串、一个 datetime字符串、一个 timestamp或一个当地时间的yymmdd 或yyymmdd格式的数字。

    则sql语句可以这样写:

    select id,title,content,addtime from tablename_tbl where UNIX_TIMESTAMP(addtime)>= UNIX_TIMESTAMP() - 10800 and UNIX_TIMESTAMP(addtime) <= UNIX_TIMESTAMP()   //10800为3小时的秒数。

    第二种方式:日期比较

    首先看直接使用+-运算:

    这种方式中,特别需要注意的是,一个时间日期值加/减一个值的含义。

    select now();

    +---------------------+

    | now() |

    +---------------------+

    | 2013-03-15 13:08:45 |

    +---------------------+

    通过now函数,我们可以获取到当前的时间,然后再请看:

    select now(),now()+1;

    +---------------------+-----------------------+

    | now() | now()+1 |

    +---------------------+-----------------------+

    | 2013-03-15 13:10:15 | 20130315131016.000000 |

    +---------------------+-----------------------+

    select now(),now()-1;

    +---------------------+-----------------------+

    | now() | now()-1 |

    +---------------------+-----------------------+

    | 2013-03-15 13:14:18 | 20130315131417.000000 |

    +---------------------+-----------------------+

    这两条语句执行后,第二列表示是在当前时刻加上/减去 一秒,这里要注意看第二列的表示形式:

    20130315131016.000000  (yyyy mm dd HH MM ss.000000)即:在给now()加上或者减去一个值的时候,跟now()的结果的表示形式是不同的,我们再看:

    select now(),now()-01;

    +---------------------+-----------------------+

    | now() | now()-01 |

    +---------------------+-----------------------+

    | 2013-03-15 13:15:05 | 20130315131504.000000 |

    +---------------------+-----------------------+

    select now(),now()+01;

    +---------------------+-----------------------+

    | now() | now()+01 |

    +---------------------+-----------------------+

    | 2013-03-15 13:15:11 | 20130315131512.000000 |

    +---------------------+-----------------------+

    看到这里,很奇怪是不是,怎么直接在数字前加0也可以执行?加减的难道不是秒数吗?(我之前就是这样认为的),执行的结果也是给now()加、减1秒;

    select now(),now()+101;

    +---------------------+-----------------------+

    | now() | now()+101 |

    +---------------------+-----------------------+

    | 2013-03-15 13:17:14 | 20130315131815.000000 |

    +---------------------+-----------------------+

    select now(),now()-101;

    +---------------------+-----------------------+

    | now() | now()-101 |

    +---------------------+-----------------------+

    | 2013-03-15 13:17:22 | 20130315131621.000000 |

    +---------------------+-----------------------+

    我们这两条语句后的执行结果,通过对比两列,我们可以发现,分别是给now()的时刻加上1分钟、1秒钟, 减去1分钟、1秒钟;再看个例子

    select now(),now()+0101;

    +---------------------+-----------------------+

    | now() | now()+0101 |

    +---------------------+-----------------------+

    | 2013-03-15 13:19:34 | 20130315132035.000000 |

    +---------------------+-----------------------+

    select now(),now()-0101;

    +---------------------+-----------------------+

    | now() | now()-0101 |

    +---------------------+-----------------------+

    | 2013-03-15 13:19:38 | 20130315131837.000000 |

    +---------------------+-----------------------+

    是不是跟奇怪了,这两条语句同样也是给当前时间加/减1分钟1秒钟。再看一个结合了年月日的例子:

    select now(), now()+00010203040506;

    +---------------------+-----------------------+

    | now() | now()+00010203040506 |

    +---------------------+-----------------------+

    | 2013-03-15 13:21:50 | 20140518172656.000000 |

    +---------------------+-----------------------+

    select now(), now()-00010203040506;

    +---------------------+-----------------------+

    | now() | now()-00010203040506 |

    +---------------------+-----------------------+

    | 2013-03-15 13:21:54 | 20120112091648.000000 |

    +---------------------+-----------------------+

    看到这里,我们大概就能够明白了+-的含义了吧;上边两条语句是:给当前日期加减:1年2个月3天 4小时5分钟6秒钟。

    所以,当我们在给now()+-一个时间的时候,其实应该这样理解的:

    +1/+01:加1秒钟

    +101/+0101:加1分钟1秒钟

    +10101/+010101:加1小时1分钟1秒钟

    +1010101/+01010101:加1天1分钟1秒钟

    +101010101/+0101010101:加1月1天1分钟1秒钟

    +1101010101/+010101010101:加1年1月1天1分钟1秒钟,这里要注意下,年这个部分可以是4位(高位没有的话会补零):00010101010101

    (减也是类似的)

    所以对于前边的问题:拉去过去三小时内新增的记录, 就可以这样写sql了:

    select id,title,content,addtime from tablename_tbl where addtime >= now() - 30000 and addtime <= now()

    另外还有一种方式就是使用mysql提供的:

    date_add(向日期添加指定的时间间隔), DATE_ADD(date,INTERVAL expr type)

    date参数是合法的日期表达式。expr参数是您希望添加的时间间隔。

    Type 值

    MICROSECOND

    SECOND

    MINUTE

    HOUR

    DAY

    WEEK

    MONTH

    QUARTER

    YEAR

    SECOND_MICROSECOND

    MINUTE_MICROSECOND

    MINUTE_SECOND

    HOUR_MICROSECOND

    HOUR_SECOND

    HOUR_MINUTE

    DAY_MICROSECOND

    DAY_SECOND

    DAY_MINUTE

    DAY_HOUR

    YEAR_MONTH

    date_sub(向日期减去指定的时间间隔), DATE_SUB(date,INTERVAL expr type) (使用方法同date_add类似)

    sql可以这样写:

    select id,title,content,addtime from tablename_tbl where addtime >= date_sub(now, INTERVAL 3 HOUR) AND addtime < now()

    (完)

    展开全文
  • mysql中日期比较大小的方法

    千次阅读 2021-01-19 06:01:22
    time) between '2013-01-01' and '2013-01-31' 你还可以这样写: select * from product where Year(add_time) = 2013 and Month(add_time) = 1 这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?...

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:

    select * from product where add_time = '2013-01-12'

    对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理:

    select * from product where Date(add_time) = '2013-01-12'

    再来一个,如果你要查询2013年1月份加入的产品呢?

    select * from product where date(add_time) between '2013-01-01' and '2013-01-31'

    你还可以这样写:

    select * from product where Year(add_time) = 2013 and Month(add_time) = 1

    这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?

    其date_col的值是在最后30天以内:

    mysql> SELECT something FROM table

    WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

    DAYOFWEEK(date)

    返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。

    mysql> select DAYOFWEEK('1998-02-03');

    -> 3

    WEEKDAY(date)

    返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

    mysql> select WEEKDAY('1997-10-04 22:23:00');

    -> 5

    mysql> select WEEKDAY('1997-11-05');

    -> 2

    DAYOFMONTH(date)

    返回date的月份中日期,在1到31范围内。

    mysql> select DAYOFMONTH('1998-02-03');

    -> 3

    DAYOFYEAR(date)

    返回date在一年中的日数, 在1到366范围内。

    mysql> select DAYOFYEAR('1998-02-03');

    -> 34

    MONTH(date)

    返回date的月份,范围1到12。

    mysql> select MONTH('1998-02-03');

    -> 2

    DAYNAME(date)

    返回date的星期名字。

    mysql> select DAYNAME("1998-02-05");

    -> 'Thursday'

    MONTHNAME(date)

    返回date的月份名字。

    mysql> select MONTHNAME("1998-02-05");

    -> 'February'

    QUARTER(date)

    返回date一年中的季度,范围1到4。

    mysql> select QUARTER('98-04-01');

    -> 2

    展开全文
  • MySQL比较日期大小的方法

    千次阅读 2021-04-05 15:29:12
    time) between '2013-01-01' and '2013-01-31' 你还可以这样写: select * from product where Year(add_time) = 2013 and Month(add_time) = 1 这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?...

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:

    select * from product where add_time = '2013-01-12'
    

    对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这时你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理:

    select * from product where Date(add_time) = '2013-01-12'
    

    再来一个,如果你要查询2013年1月份加入的产品呢?

    select * from product where date(add_time) between '2013-01-01' and '2013-01-31'
    

    你还可以这样写:

    select * from product where Year(add_time) = 2013 and Month(add_time) = 1
    

    这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?

    其date_col的值是在最后30天以内:

    mysql> SELECT something FROM table
     WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
    DAYOFWEEK(date)
    

    返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。

    mysql> select DAYOFWEEK('1998-02-03'); 
     -> 3 
    WEEKDAY(date)
    

    返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

    mysql> select WEEKDAY('1997-10-04 22:23:00'); 
     -> 5 
     mysql> select WEEKDAY('1997-11-05'); 
     -> 2 
    DAYOFMONTH(date)
    

    返回date的月份中日期,在1到31范围内。

    mysql> select DAYOFMONTH('1998-02-03'); 
     -> 3 
    DAYOFYEAR(date)
    

    返回date在一年中的日数, 在1到366范围内。

    mysql> select DAYOFYEAR('1998-02-03'); 
     -> 34 
    MONTH(date)
    

    返回date的月份,范围1到12。

    mysql> select MONTH('1998-02-03'); 
     -> 2 
    DAYNAME(date)
    

    返回date的星期名字。

    mysql> select DAYNAME("1998-02-05"); 
     -> 'Thursday'
    MONTHNAME(date)
    

    返回date的月份名字。

    mysql> select MONTHNAME("1998-02-05"); 
     -> 'February'
    QUARTER(date)
    

    返回date一年中的季度,范围1到4。

    mysql> select QUARTER('98-04-01'); 
     -> 2
    
    展开全文
  • time) between '2013-01-01' and '2013-01-31' 你还可以这样写: select * from product where Year(add_time) = 2013 and Month(add_time) = 1 这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?...

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:

    select * from product where add_time = '2013-01-12'

    对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这时你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理:

    select * from product where Date(add_time) = '2013-01-12'

    再来一个,如果你要查询2013年1月份加入的产品呢?

    select * from product where date(add_time) between '2013-01-01' and '2013-01-31'

    你还可以这样写:

    select * from product where Year(add_time) = 2013 and Month(add_time) = 1

    这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧?

    其date_col的值是在最后30天以内:

    mysql> SELECT something FROM table

    WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

    DAYOFWEEK(date)

    返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。

    mysql> select DAYOFWEEK('1998-02-03');

    -> 3

    WEEKDAY(date)

    返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

    mysql> select WEEKDAY('1997-10-04 22:23:00');

    -> 5

    mysql> select WEEKDAY('1997-11-05');

    -> 2

    DAYOFMONTH(date)

    返回date的月份中日期,在1到31范围内。

    mysql> select DAYOFMONTH('1998-02-03');

    -> 3

    DAYOFYEAR(date)

    返回date在一年中的日数, 在1到366范围内。

    mysql> select DAYOFYEAR('1998-02-03');

    -> 34

    MONTH(date)

    返回date的月份,范围1到12。

    mysql> select MONTH('1998-02-03');

    -> 2

    DAYNAME(date)

    返回date的星期名字。

    mysql> select DAYNAME("1998-02-05");

    -> 'Thursday'

    MONTHNAME(date)

    返回date的月份名字。

    mysql> select MONTHNAME("1998-02-05");

    -> 'February'

    QUARTER(date)

    返回date一年中的季度,范围1到4。

    mysql> select QUARTER('98-04-01');

    -> 2

    展开全文
  • DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。DATE_FORMAT(date,format)可以使用的格式有:格式 描述%a缩写星期名%b缩写月名%c月,数值%D带有英文前缀的月中的天%d月的天,数值(00-31)%e月的天,数值(0-31...
  • Mysql时间的函数很多,非常自由。 在项目中经常用到的就是时间的加减。 比如60天前,Oracle中直接就是sysdate-60,Mysql中就不行。 对时间加减的函数是 加ADDDATE(),减SUBDATE(); select SUBDA...
  • 不能用两个字符串比较的小的方法来做。例如:‘2010-10-20’ > ‘2010-12-15’正解:都是 , 后面的时间- 前面的时间mysqlselect count(*) from table where timestampdiff(hour,'2008-08-08 12:00:00','2008-08-...
  • mysql中的时间比较一、时间类型二、时间比较 一、时间类型 mysql有五大时间类型: datetime 可以存储年月日时分秒类型的时间,如果在设计字段的时候可以设置获取当前时间,插入数据的时候,如果没有对该赋值,...
  • 首先,使用mysql查询从今往后的60天数据SELECTcount(*),b1.record_dateFROMnk_house_use_record AS b1,(SELECTa.theme_id,a.theme_name,b.house_id,b.house_nameFROMnk_house_theme AS a,nk_house AS bWHEREa.theme_...
  • mysql中datetime比较大小

    2021-04-24 22:12:09
    select sum(studychj) as tofflinejz from afterline ... 就是用unix_timestamp函数,将字符型的时间,转成unix时间戳。个人觉得这样比较更踏实点儿。 方法二 select DATE_FORMAT('2015-06-06 23:22:26','%Y-%m-%d')
  • mysql varchar 比较大小

    千次阅读 2021-03-03 17:41:19
    mysql 数据库表中 定义 time 字段类型是 varchar(64) 比如存储的数据是 2021-03-03 这个时候,where语句中 time >= '2021-03-03' 这样是可以查询出来的, 但如果是 time >= '2021-03-03 00:00:00' ...
  • mysql中datetime比较大小问题select sum(studychj) as tofflinejz from afterline where checkflag=1 and studytype=1 and studybegin>='2010-01-01 00:00:00' and studyend<='2010-12-01 00:00:00' and ...
  • Mysql 日期大小比较

    千次阅读 2021-04-26 13:22:02
    Mysql 日期大小比较mysql 时间参数 年月日 时分秒 比较大小mysql 时间参数 年月日 比较大小 mysql 时间参数 年月日 时分秒 比较大小 <select id="checkTimeRepeatNum" parameterType="HomepageAdvertisement" ...
  • mysql中日期比较有许多的函数,下面我来给大家总结一下常用的mysql中日期比较大小有需要了解的朋友可进入参考参考,假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:select * from ...
  • 获取时间返回的秒数:strtotime('2019-05-10 00:00:00')遇到一个业务功能需要将当前时间与数据库中的会议开始、结束时间进行比较,记录一下,方便下次用。用unix_timestamp函数,将字符型的时间,转成unix时间戳。...
  • MySql时间比较方法 周 小时 分钟

    千次阅读 2021-01-18 20:08:08
    unix_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。...有了这个函数,就可以很自然地把时间比较转换为一个无符号整数的比较。例如,判断一个时间是否在一个区间内uni...
  • 详解Mysql中日期比较大小的方法

    千次阅读 2021-01-18 18:22:57
    -> 2 总结 以上所述是小编给大家介绍的Mysql中日期比较大小的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持! 本文标题: 详解Mysql中日期...
  • img日期时间类型占用空间日期格式最小值最大值零值表示DATETIME8 bytesYYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:590000-00-00 00:00:00TIMESTAMP4 bytesYYYY-MM-DD HH:MM:SS197001010800012038 年的...
  • mysql 日期大小比较,加减 2019-06-25

    千次阅读 2021-01-18 21:17:29
    日期比较最简单的方法,把日期转为时间戳, 直接使用mysql中的 unix_timestamp("时间或者列")函数SELECT b.end_time as "原合同",a.end_time as "续租合同",b.quit_action,b.contract_no,a.* from contracts a,...
  • 1.查看数据库表基本信息。select * from information_schema.TABLES where information_schema.TABLES.TABLE_SCHEMA = '数据库名' and information_schema....2.查看mysql数据库大小SELECT sum(DATA_LENGTH)+sum(IND...
  • 环境是centos面板宝塔使用命令行进入mysql的root//设置文件大小,单位是字节,下面换算是100Mset global max_binlog_size=104857600;//设置文件保存天数,下面是保存7天set global expire_logs_days = 7;常用命令,前提...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 235,117
精华内容 94,046
关键字:

mysql比较时间大小

mysql 订阅