如果以字符串存储,格式就是 年月日(20120101等于2012-01-01)的话
首先把 日期字符串 转换成 合格的日期
concat_ws(连接符号,字符串1,字符串2...)
第一步代码:
SELECT
CONCAT_WS('-',
SUBSTRING('20120101',1,4),
SUBSTRING('20120101',5,2),
SUBSTRING('20120101',7,2) ) AS 开始日期 ,
CONCAT_WS('-',
SUBSTRING('20120608',1,4),
SUBSTRING('20120608',5,2),
SUBSTRING('20120608',7,2) ) AS 结束日期
------------------------------------------------------------
第二步,将日期使用日期运算函数进行相减:
TIMESTAMPDIFF(返回结果,日期1,日期2)
最终代码:
SELECT
CONCAT_WS('-',
SUBSTRING('20120101',1,4),
SUBSTRING('20120101',5,2),
SUBSTRING('20120101',7,2) ) AS 开始日期 ,
CONCAT_WS('-',
SUBSTRING('20120608',1,4),
SUBSTRING('20120608',5,2),
SUBSTRING('20120608',7,2) ) AS 结束日期 ,
TIMESTAMPDIFF(
DAY,
CONCAT_WS('-',
SUBSTRING('20120101',1,4),
SUBSTRING('20120101',5,2),
SUBSTRING('20120101',7,2) ) ,
CONCAT_WS('-',
SUBSTRING('20120608',1,4),
SUBSTRING('20120608',5,2),
SUBSTRING('20120608',7,2) )
) AS 相差天数
-------------------------------------------------------------------------------------
不好意思,看错题目,我以为你是要运算。如果是比较,就先把日期转换为时间戳进行比较是这样:
unix_timestamp(日期)
SELECT
unix_timestamp(
CONCAT_WS('-',
SUBSTRING('20120101',1,4),
SUBSTRING('20120101',5,2),
SUBSTRING('20120101',7,2) )
) AS 开始日期,
unix_timestamp(
CONCAT_WS('-',
SUBSTRING('20120608',1,4),
SUBSTRING('20120608',5,2),
SUBSTRING('20120608',7,2) )
) AS 开始结束
--------------------------------------------------------------------------
直接判断即可
新建一个数据库来验证:
CREATE DATABASE test5_4_17
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE UTF8_BIN
#新建一个test_4_17 使用utf8字符串
USE test5_4_17
#打开数据库
CREATE TABLE test(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
date_v VARCHAR(30) NOT NULL
)
INSERT INTO test VALUES(NULL,'20110303')
INSERT INTO test VALUES(NULL,'20120303')
INSERT INTO test VALUES(NULL,'20120304')
INSERT INTO test VALUES(NULL,'20130303')
SELECT * FROM test#查看数据有了
SELECT * FROM
test
WHERE
UNIX_TIMESTAMP(date_v) >=
unix_timestamp(
CONCAT_WS('-',
SUBSTRING('20120101',1,4),
SUBSTRING('20120101',5,2),
SUBSTRING('20120101',7,2) )
)
AND
UNIX_TIMESTAMP(date_v) <=
unix_timestamp(
CONCAT_WS('-',
SUBSTRING('20120608',1,4),
SUBSTRING('20120608',5,2),
SUBSTRING('20120608',7,2) )
)
结果是
20120303
20120304
-----------------------------------------------------------------------------------------
参数中的 日期字符串 可以换成 字段名
查询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的函数,分别是取得年,月,和当前时间在本年是第几天的3个函数
date就是你保存时间的字段
等号后面的当然条件啦。
什么意思表tb
a b
1 3
2 5
7 4
找a>b的数据
select * from tb where a>b
这样的?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)