我很好奇构建一个查询的正确方法是什么,其中基于代表特定月份的时间戳提取行。鉴于不同的月份有不同的天数,有没有办法生成一个查询,该查询总是为您提供时间戳包含当前月份的行,以便结果只包括当前月份?
问问题
48 次
6 回答
2
你的意思是这样的吗
SELECT * FROM tbl WHERE
MONTH(timesp) = MONTH(NOW()) AND
YEAR(timesp) = YEAR(NOW());
于 2013-06-03T16:41:48.630 回答
1
您可以使用以下FROM_UNIXTIME()
功能:
SELECT *
FROM tableName
WHERE MONTH(FROM_UNIXTIME(timestampField))==6
于 2013-06-03T16:41:37.170 回答
0
只需使用MONTH
:
select *
from foo
where month_column = MONTH(getdate())
and year_column = YEAR(getdate())
于 2013-06-03T16:43:07.453 回答
0
试试这个 sql。
select *
from yourtable
where yourdatefield>=DATE_SUB(CURDATE(),INTERVAL 1 MONTH);
于 2013-06-03T16:43:37.110 回答
0
你正在寻找这样的东西:
SELECT * FROM table where MONTH(date_row) = $month;
于 2013-06-03T16:46:10.847 回答
0
如果您在日期字段上有索引,那么这是有效的(T-SQL 语法,这个想法适用于任何 RDBMS)
SELECT
*
FROM
tableName
WHERE
dateTimeField
BETWEEN
-- build the string 'YYYY-MM-01', cast back as a datetime
CAST(
CAST(YEAR(GETDATE()) AS varchar) + '-' + CAST(MONTH(GETDATE()) AS varchar) + '-01'
AS datetime
)
AND
-- add one month, subtract one day
DATEADD(mm, 1,
-- build the string 'YYYY-MM-01', cast back as a datetime
CAST(
CAST(YEAR(GETDATE()) AS varchar) + '-' + CAST(MONTH(GETDATE()) AS varchar) + '-01'
AS datetime
)
) - 1
当然,在正确范围内获得两个日期时间值的任何其他方法都可以。
SQL Server 必须LEFT(CONVERT(varchar, GETDATE(), 120), 8) + '01'
将日期时间转换为字符串,其他 Db 服务器有自己的功能来做同样的事情。也许您可以更轻松地在调用应用程序中计算这两个值——如何获得它们并不是重点。
关键是BETWEEN
可以使用索引,而其他适用的解决方案WHERE MONTH(dateTimeField) = 6
将触发表扫描,这是您可以对表执行的最慢操作。
于 2013-06-03T16:55:39.813 回答