Mysql 我的Sql日期比较,包括给定的日期范围
我将日期存储为UpdateOn(值如'2012-11-12 12:38:43') 我的问题是:Mysql 我的Sql日期比较,包括给定的日期范围,mysql,sql,Mysql,Sql,我将日期存储为UpdateOn(值如'2012-11-12 12:38:43') 我的问题是: select * from mytable where updatedOn >= '11/12/2012' AND updatedOn <= '11/12/2012' 从mytable中选择* 其中updatedOn>='11/12/2012'和updatedOn您需要获取updatedOn列的组件,并将日期文本格式化为以下格式之一: 或者,使用MySQL函数将字符串转换为MySQL日
select * from mytable
where updatedOn >= '11/12/2012' AND updatedOn <= '11/12/2012'
从mytable中选择*
其中updatedOn>='11/12/2012'和updatedOn您需要获取updatedOn
列的组件,并将日期文本格式化为以下格式之一:
或者,使用MySQL函数将字符串转换为MySQL日期:
SELECT *
FROM mytable
WHERE DATE(updatedOn) BETWEEN STR_TO_DATE('11/12/2012', '%d/%m/%Y')
AND STR_TO_DATE('11/12/2012', '%d/%m/%Y')
如果避免使用,则应使用日期函数-
SELECT
*
FROM
mytable
WHERE
DATE(updatedOn) = '2012-12-11'
你需要试一试
select * from mytable
where updatedOn >= '11/12/2012' AND updatedOn <= '11/12/2012 23:59:59.999'
从mytable中选择*
其中updatedOn>='11/12/2012'和updatedOn如果updatedOn
字段被索引,并且您希望使用该索引`您不应该在DATE(updatedOn)
上执行筛选。您的函数和操作需要在常量上,而不是在您正在搜索的字段上。当然,这是一种简洁方便的输入逻辑的方法,但它会破坏优化程序为该筛选器使用索引的能力。如果UpdatedOn
字段已编制索引,并且您希望使用该索引,则决不能在DATE(UpdatedOn)
上执行筛选器。您的函数和操作需要在常量上,而不是在您正在搜索的字段上。当然,这是一种简洁方便的输入逻辑的方法,但它会破坏优化者使用该过滤器索引的能力。@Dems:同意。你的答案更符合索引。那么11/12/2012 23:59:59.01
呢?或者11/12/2012 23:59:59.001
?那11/12/2012 23:59:59.9991
呢?我想指出的是,使用我认为mysql只存储精度为1毫秒的日期/时间,但我同意你的看法,你的答案更准确、更优雅,我只是提供了另一种选择。@Ankur:你说得对,但是(已经存在的)已经和(即将出现的)尽管如此,这个答案还是排在DEM的第二位,因为这个答案也可以作为索引使用。如果你对日期使用相同的格式,比如'2012-11-12'
,而不是OP的问题'11/12/2012'
SELECT
*
FROM
mytable
WHERE
DATE(updatedOn) = '2012-12-11'
select * from mytable
where updatedOn >= '11/12/2012' AND updatedOn <= '11/12/2012 23:59:59.999'