mysql怎么比较年月日 mysql日期怎么比较

Mysql如何按照日期对比数据查询2011的数据:select * from表 where year(date)='2011';
查找月份为12的数据:select * from 表 where month(date)='12';
查找天数为本年第二天的数据:select * from 表 where dayofyear(date)='2';
我解释一下:
select * from 表 where 这是必须的
year,month,dayofyear是mysql的函数mysql怎么比较年月日,分别是取得年mysql怎么比较年月日,月,和当前时间在本年是第几天的3个函数
date就是你保存时间的字段
等号后面的当然条件啦 。
MYSQL数据库如何对比时间SELECT * FROM order WHERE user_id=001 AND DATE_FORMAT(time,'%Y-%m-%d')="2014-10-11 "
或者
SELECT * FROM order WHERE user_id=001 AND time = 2014-10-11 AND time2014-10-12
如果表的记录较多时,推荐使用第二种的方法 。
PHP以及MYSQL日期比较方法MYSQL日期比较
TO_DAYS(NOW())
-
TO_DAYS(date_col)
=
30;
我们的date_col必须是日期时间格式 , 而不能是时间戳,
mysql
SELECT
FROM_UNIXTIME(875996580);
-
'1997-10-04
22:23:00'
day(FROM_UNIXTIME(1277709862))这个返回的是某个时间戳到现在经过的天数
获取
日:day(FROM_UNIXTIME(add_time))
获取
月:month(FROM_UNIXTIME(add_time))
获取
年:year(FROM_UNIXTIME(add_time))
sql文里面获得时间戳后格式化为日,月,年:day(now()),month(now()),year(now())
其中add_time是字段名,存放格式为linux时间戳.
mysql
set
@a
=
unix_timestamp();
Query
OK,
rows
affected
(0.00
sec)
mysql
select
@a;
------------
|
【mysql怎么比较年月日 mysql日期怎么比较】@a
|
------------
|
1154942084
|
------------
1
row
in
set
(0.00
sec)
mysql
select
from_unixtime(@a);
---------------------
|
from_unixtime(@a)
|
---------------------
|
2006-08-07
17:14:44
|
---------------------
1
row
in
set
(0.00
sec)
mybatis mysql怎么比较两个timestamp的时间IMESTAMP的变体
1 , TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在创建新记录和修改现有记录的时候都对这个数据列刷新
2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP在创建新记录的时候把这个
字段设置为当前时间,但以后修改时,不再刷新它
3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在创建新记录的时候把这个字段设置为0,
以后修改时刷新它
4,TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP
在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它
MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期
与时间的功能,你可以使用TIMESTAMP列类型下面就详细说明TIMESTAMP列类型
*TIMESTAMP列类型*
TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示 。
TIMESTAMP值显示尺寸的格式如下表所示mysql怎么比较年月日:

--------------- ----------------
| 列类型| 显示格式|
| TIMESTAMP(14) | YYYYMMDDHHMMSS |
| TIMESTAMP(12) | YYMMDDHHMMSS|
| TIMESTAMP(10) | YYMMDDHHMM |
| TIMESTAMP(8) | YYYYMMDD|
| TIMESTAMP(6) | YYMMDD |
| TIMESTAMP(4) | YYMM|
| TIMESTAMP(2) | YY |
--------------- ----------------
“完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸
创造最常见的显示尺寸是6、8、12、和14 。
你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14 。
列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数 。
*列如:*
定义字段长度 强制字段长度
TIMESTAMP(0) - TIMESTAMP(14)
TIMESTAMP(15)- TIMESTAMP(14)
TIMESTAMP(1) - TIMESTAMP(2)
TIMESTAMP(5) - TIMESTAMP(6)
所有的TIMESTAMP列都有同样的存储大小 , 使用被指定的时期时间值的完整精度
(14位)存储合法的值不考虑显示尺寸 。不合法的日期,将会被强制为0存储
*这有几个含意:
1、虽然你建表时定义mysql怎么比较年月日了列TIMESTAMP(8) , 但在你进行数据插入与更新时TIMESTAMP列
实际上保存了14位的数据(包括年月日时分秒),只不过在你进行查询时MySQL返回给
你的是8位的年月日数据 。如果你使用ALTER TABLE拓宽一个狭窄的TIMESTAMP列,
以前被“隐蔽”的信息将被显示 。
2、同样 , 缩小一个TIMESTAMP列不会导致信息失去,除了感觉上值在显示时 ,
较少的信息被显示出 。
3、尽管TIMESTAMP值被存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP();
由于MySQL返回TIMESTAMP列的列值是进过格式化后的检索的值,这意味着你可能不能使用某些函数来操作TIMESTAMP列(例如HOUR()或SECOND()) , 除非TIMESTAMP值的相关部分被包含在格式化的值中 。
例如,一个TIMESTAMP列只有被定义为TIMESTAMP(10)以上时 , TIMESTAMP列的HH部分才会被显示,
因此在更短的TIMESTAMP值上使用HOUR()会产生一个不可预知的结果 。
4、不合法TIMESTAMP值被变换到适当类型的“零”值(00000000000000) 。(DATETIME,DATE亦然)
*你可以使用下列语句来验证:*
CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCREMENT, 'date1'
TIMESTAMP (8) PRIMARY KEY('id'));
INSERT INTO test SET id = 1;
SELECT * FROM test;
---- ----------------
| id | date1 |
---- ----------------
| 1 | 20021114|
---- ----------------
ALTER TABLE test CHANGE 'date1' 'date1' TIMESTAMP(14);
SELECT * FROM test;
---- ----------------
| id | date1 |
---- ----------------
| 1 | 20021114093723 |
---- ----------------
你可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作 。
如果你有多个TIMESTAMP列,只有第一个自动更新 。自动更新第一个TIMESTAMP列在下列任何条件下发生:
1、列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定 。
2、列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值 。(注意一个UPDATE
设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为
它当前的值,MySQL为了效率而忽略更改 。)
3、你明确地设定TIMESTAMP列为NULL.
4、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW() 。
CREATE TABLE test (
'id' INT (3) UNSIGNED AUTO_INCREMENT,
'date1' TIMESTAMP (14),
'date2' TIMESTAMP (14),
PRIMARY KEY('id')
);
INSERT INTO test (id, date1, date2) VALUES (1, NULL, NULL);
INSERT INTO test SET id= 2;
---- ---------------- ----------------
| id | date1 | date2 |
---- ---------------- ----------------
| 1 | 20021114093723 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
---- ---------------- ----------------
-第一条指令因设date1、date2为NULL,所以date1、date2值均为当前时间第二条指令
因没有设date1、date2列值,第一个TIMESTAMP列date1为更新为当前时间,
而二个TIMESTAMP列date2因日期不合法而变为“00000000000000”
UPDATE test SET id= 3 WHERE id=1;
---- ---------------- ----------------
| id | date1 | date2 |
---- ---------------- ----------------
| 3 | 20021114094009 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
---- ---------------- ----------------
-这条指令没有明确地设定date2的列值,所以第一个TIMESTAMP列date1将被更新为当前时间
UPDATE test SET id= 1,date1=date1,date2=NOW() WHERE id=3;
---- ---------------- ----------------
| id | date1 | date2 |
---- ---------------- ----------------
| 1 | 20021114094009 | 20021114094320 |
| 2 | 20021114093724 | 00000000000000 |
---- ---------------- ----------------
-这条指令因设定date1=date1,所以在更新数据时date1列值并不会发生改变而
因设定date2=NOW() , 所以在更新数据时date2列值会被更新为当前时间此指令等效为
UPDATE test SET id= 1,date1=date1,date2=NULL WHERE id=3;
因MySQL返回的 TIMESTAMP 列为数字显示形式,你可以用DATE_FROMAT()函数来格式化 TIMESTAMP 列
SELECT id,DATE_FORMAT(date1,'%Y-%m-%d %H:%i:%s') As date1,
DATE_FORMAT(date2,'%Y-%m-%d %H:%i:%s') As date2 FROM test;
---- --------------------- ---------------------
| id | date1| date2|
---- --------------------- ---------------------
| 1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |
| 2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 |
---- --------------------- ---------------------
SELECT id,DATE_FORMAT(date1,'%Y-%m-%d') As date1,
DATE_FORMAT(date2,'%Y-%m-%d') As date2 FROM test;
---- ------------- -------------
| id | date1| date2|
---- ------------- -------------
| 1 | 2002-11-14 | 2002-11-14 |
| 2 | 2002-11-14 | 0000-00-00 |
---- ------------- -------------
在某种程度上,你可以把一种日期类型的值赋给一个不同的日期类型的对象 。
然而,而尤其注意的是:值有可能发生一些改变或信息的损失:
1、如果你将一个DATE值赋给一个DATETIME或TIMESTAMP对象,结果值的时间部分被
设置为'00:00:00',因为DATE值中不包含有时间信息 。
2、如果你将一个DATETIME或TIMESTAMP值赋给一个DATE对象,结果值的时间部分被删除,
因为DATE类型不存储时间信息 。
3、尽管DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,
但所有类型不都有同样的值范围 。
例如,TIMESTAMP值不能比1970早,也不能比2037晚,这意味着,一个日期例如'1968-01-01',
当作为一个DATETIME或DATE值时它是合法的,但它不是一个正确TIMESTAMP值!
并且如果将这样的一个对象赋值给TIMESTAMP列,它将被变换为0 。
*当指定日期值时,当心某些缺陷: *
1、允许作为字符串指定值的宽松格式能被欺骗 。例如,,因为“:”分隔符的使用,
值'10:11:12'可能看起来像时间值,但是如果在一个日期中使用,上下文将作为年份被
解释成'2010-11-12' 。值'10:45:15'将被变换到'0000-00-00',因为'45'不是一个合法的月份 。
2、以2位数字指定的年值是模糊的,因为世纪是未知的 。MySQL使用下列规则解释2位年值:
在00-69范围的年值被变换到2000-2069 。在范围70-99的年值被变换到1970-1999 。
Mysql 日期比较这里是一个使用日期函数mysql怎么比较年月日的例子 。下面的查询选择mysql怎么比较年月日了所有记录mysql怎么比较年月日,其date_col的值是在最后30天以内:
mysql SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) = 30;
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天mysql怎么比较年月日,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
WEEK(date)
WEEK(date,first)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52 。2个参数形式WEEK()允许
指定星期是否开始于星期天或星期一 。如果第二个参数是0,星期从星期天开始 , 如果第二个参数是1,
从星期一开始 。
mysql select WEEK('1998-02-20');
- 7
mysql select WEEK('1998-02-20',0);
- 7
mysql select WEEK('1998-02-20',1);
- 8
YEAR(date)
返回date的年份,范围在1000到9999 。
mysql select YEAR('98-02-03');
- 1998
HOUR(time)
返回time的小时 , 范围是0到23 。
mysql select HOUR('10:05:03');
- 10
MINUTE(time)
返回time的分钟,范围是0到59 。
mysql select MINUTE('98-02-03 10:05:03');
- 5
SECOND(time)
回来time的秒数 , 范围是0到59 。
mysql select SECOND('10:05:03');
- 3
PERIOD_ADD(P,N)
增加N个月到阶段P(以格式YYMM或YYYYMM) 。以格式YYYYMM返回值 。注意阶段参数P不是日期值 。
mysql select PERIOD_ADD(9801,2);
- 199803
PERIOD_DIFF(P1,P2)
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM 。注意 , 时期参数P1和P2不是日期值 。
mysql select PERIOD_DIFF(9802,199703);
- 11
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
这些功能执行日期运算 。对于MySQL 3.22,他们是新的 。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词 。
mybatis中时间比较Date和String在常规操作中 , mysql中存在精确到年月日时分秒、年月日、年月、年的查询或者比较
mybatis中如何去实现这样:
精确度:时分秒
create_time#{endTime,jdbcType=TIMESTAMP}
精确度:年月日
create_time#{endTime,jdbcType=DATE}
date_format(create_time,'%y%m%d') =date_format( #{createTime},'%y%m%d')
String格式比较:
年月日方式比较
DATE_FORMAT(pay_plan_date,'%Y-%m-%d')=#{payPlanDate,jdbcType=VARCHAR}
mysql中
年月日 DATE_FORMAT(pay_plan_date,'%Y-%m-%d')='2020-11-30';
时分秒
关于mysql怎么比较年月日和mysql日期怎么比较的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读