我表格中的日期是字符串格式:
"10/12/2009"
现在如何从一个月获得所有记录,比如6月(提供数字“6”)?
答案 0 :(得分:3)
检查MySQL函数STR_TO_DATE。
但是,您不应将日期存储为字符串。使用DATE类型。
答案 1 :(得分:0)
STR_TO_DATE函数是您的朋友:
SELECT * FROM my_table
WHERE STR_TO_DATE('10/12/2009','%M/%d/%Y') >= '2012-06-01';
答案 2 :(得分:0)
您问题的简短回答是,您可以使用STR_TO_DATE
和MONTH
函数1)将字符串表示转换为DATE,2)从日期中提取月份组件: / p>
SELECT t.*
FROM mytable t
WHERE MONTH(STR_TO_DATE(t.dateasstringcol,'%M/%d/%Y')) = 6
(这是假设在'10 / 12/2009',你指定的是10月12日,而不是12月10日。如果不是这样,你需要调整格式字符串。)
或者,如果月份确实是日期的主要部分,那么如果月份是主要成分,则可以进行简单的字符串比较:
SELECT t.*
FROM mytable t
WHERE t.dateasstringcol LIKE '6/%'
OR t.dateasstringcol LIKE '06/%'
(如果您为表示日期的striing值指定了确切的格式,则可以消除其中一个谓词:如果month总是存储为两位数 - 或者 - 月份永远不会存储前导零。)
如果您要传递月份的参数,例如'6',那么你可以构建你的语句:
WHERE t.dateasstringcol LIKE '6' + '/%'
如果month是该日期的第二个组成部分,那么您可以使用:
SELECT t.*
FROM mytable t
WHERE t.dateasstringcol LIKE '%/' + '6' + '/%'
OR t.dateasstringcol LIKE '%/' + '06' + /%'
注意:
以前的所有示例查询都会返回任何年份(2009年,2010年,2011年)6月的行
您可以使用YEAR函数代替MONTH函数,或者进行字符串比较,扩展这些示例,并使用年份执行类似的操作
AND t.dateasstringcol LIKE '%/%/2011'
通常情况下,我们会使用日期范围提取特定年份的特定月份的行,例如:
SELECT t.*
FROM mytable t
WHERE MONTH(STR_TO_DATE(t.dateasstring,'%M/%d/%Y')) >= '2011-06-01'
AND MONTH(STR_TO_DATE(t.dateasstring,'%M/%d/%Y')) < '2011-07-01'
当然,当日期值存储为DATE
数据类型而不是VARCHAR时,这意味着我们不需要STR_TO_DATE和MONTH函数,我们可以指定与本机DATE列的比较。这种方法允许我们在日期列上使用索引,这可以提高大型表的查询性能。
SELECT t.*
FROM mytable t
WHERE t.realdatecol >= '2011-06-01'
AND t.realdatecol < '2011-07-01'
答案 3 :(得分:0)
MONTH应该会有所帮助。 e.g:
$month = date('m'); OR particular month.
SELECT * FROM users WHERE MONTH(str_to_date("10/12/2009",'%e/%m/%Y')) = $month;