mysql两个数字型字符串比较!详细如下

mysql两个数字型字符串比较!详细如下,第1张

我的答案是纯手打的,请认真看,不要浪费我的表情哦~

如果以字符串存储,格式就是 年月日(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就是你保存时间的字段

等号后面的当然条件啦。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7208517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存