我需要在当月的第一天和当天之间从MySQL数据库中选择数据。
select*from table_name
where date between "1st day of current month" and "current day"
有人可以提供此查询的工作示例吗?
答案 0 :(得分:124)
select * from table_name
where (date between DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) AND CURDATE() )
或更好:
select * from table_name
where (date between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() )
答案 1 :(得分:26)
我正在寻找类似的查询,我需要在查询中使用一个月的第一天。
last_day
功能对我不起作用,但DAYOFMONTH
派上用场。
因此,如果有人正在寻找相同的问题,以下代码将返回当月第一天的日期。
SELECT DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY);
将日期列与该月的第一天进行比较:
select * from table_name where date between
DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) and CURRENT_DATE
答案 2 :(得分:5)
select * from table_name
where `date` between curdate() - dayofmonth(curdate()) + 1
and curdate()
答案 3 :(得分:3)
我使用了以下查询。它过去对我很有用。
select date(now()) - interval day(now()) day + interval 1 day
答案 4 :(得分:2)
试试这个:
SET @StartDate = DATE_SUB(DATE(NOW()),INTERVAL (DAY(NOW())-1) DAY);
SET @EndDate = ADDDATE(CURDATE(),1);
select * from table where (date >= @StartDate and date < @EndDate);
答案 5 :(得分:1)
mysql当前月份和当前年度的完整解决方案,它也可以正确使用索引:)
-- Current month
SELECT id, timestampfield
FROM table1
WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY)
AND timestampfield <= LAST_DAY(CURRENT_DATE);
-- Current year
SELECT id, timestampfield
FROM table1
WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFYEAR(CURRENT_DATE)-1 DAY)
AND timestampfield <= LAST_DAY(CURRENT_DATE);
答案 6 :(得分:1)
select * from table
where date between
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date;
答案 7 :(得分:1)
select * from <table>
where <dateValue> between last_day(curdate() - interval 1 month + interval 1 day)
and curdate();
答案 8 :(得分:0)
不太正统的方法可能是
SELECT * FROM table_name
WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7)
AND table_name.date <= CURDATE();
作为一个月的第一天和现在之间的日期相当于本月的日期,之前的日期。不过,我确实觉得这比其他方法更容易。
答案 9 :(得分:0)
SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month;
答案 10 :(得分:0)
我用了这个select DATE_ADD(DATE_SUB(LAST_DAY(now()), INTERVAL 1 MONTH),INTERVAL 1 day) first_day , LAST_DAY(now()) last_day, date(now()) today_day
答案 11 :(得分:0)
我有一些类似的要求-与find first day of the month
相似,但基于用户在其个人资料页面中选择的year end month
。
问题陈述-查找用户在其财政年度中完成的所有txns
。 Financial year
使用year end
月值确定,其中month
可以是任何有效月份-1 for Jan
,2 for Feb
,3 for Mar
,.... { {1}}。
对于12 for Dec
上的一些客户financial year end
,有些在March
上观察它。
December
最后,下面是查询。 -
Scenarios - (Today is `08 Aug, 2018`)
1. If `financial year` ends on `July` then query should return `01 Aug 2018`.
2. If `financial year` ends on `December` then query should return `01 January 2018`.
3. If `financial year` ends on `March` then query should return `01 April 2018`.
4. If `financial year` ends on `September` then query should return `01 October 2017`.
其中select @date := (case when ? >= month(now())
then date_format((subdate(subdate(now(), interval (12 - ? + month(now()) - 1) month), interval day(now()) - 2 day)) ,'%Y-%m-01')
else date_format((subdate(now(), interval month(now()) - ? - 1 month)), '%Y-%m-01') end)
是?
个月(值从1到12)。
答案 12 :(得分:0)
在对正在电子商务商店上运行的某些商业智能查询进行相同的查询后,我在这里发现自己。我想添加自己的解决方案,因为这可能对其他人有帮助。
set @firstOfLastLastMonth = DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL -2 MONTH)),INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL -2 MONTH)))-1 DAY);
set @lastOfLastLastMonth = LAST_DAY(DATE_ADD(NOW(), INTERVAL -2 MONTH));
set @firstOfLastMonth = DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 MONTH)),INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 MONTH)))-1 DAY);
set @lastOfLastMonth = LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 MONTH));
set @firstOfMonth = DATE_ADD(@lastOfLastMonth, INTERVAL 1 DAY);
set @today = CURRENT_DATE;
@firstOfLastLastMonth = '2019-08-01'
@lastOfLastLastMonth = '2019-08-31'
@firstOfLastMonth = '2019-09-01'
@lastOfLastMonth = '2019-09-30'
@firstOfMonth = '2019-10-01'
@today = '2019-10-08'
答案 13 :(得分:0)
这里的关键是获取每月的第一天。为此,有几种选择。在性能方面,我们的测试表明它们之间没有显着差异-we wrote a whole blog article on the topic。我们的发现表明,真正重要的是您是否需要结果为VARCHAR,DATETIME或DATE。
获取月中第一天实际问题的最快解决方案将返回VARCHAR:
SELECT CONCAT(LEFT(CURRENT_DATE, 7), '-01') AS first_day_of_month;
第二快的解决方案提供了DATETIME结果-比以前慢了大约三倍:
SELECT TIMESTAMP(CONCAT(LEFT(CURRENT_DATE, 7), '-01')) AS first_day_of_month;
最慢的解决方案返回DATE对象。不相信我吗? Run this SQL Fiddle and see for yourself?
在您的情况下,由于您需要将该值与表中的其他DATE值进行比较,因此使用哪种方法并不重要,因为即使您的公式未返回DATE对象,MySQL也会隐式进行转换
所以,请选择。对您来说,哪个最易读?我选择第一个,因为它是最短的,而且可以说是最简单的:
SELECT * FROM table_name
WHERE date BETWEEN CONCAT(LEFT(CURRENT_DATE, 7), '-01') AND CURDATE;
SELECT * FROM table_name
WHERE date BETWEEN DATE(CONCAT(LEFT(CURRENT_DATE, 7), '-01')) AND CURDATE;
SELECT * FROM table_name
WHERE date BETWEEN (LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY - INTERVAL 1 MONTH) AND CURDATE;
SELECT * FROM table_name
WHERE date BETWEEN (DATE(CURRENT_DATE) - INTERVAL (DAYOFMONTH(CURRENT_DATE) - 1) DAY) AND CURDATE;
SELECT * FROM table_name
WHERE date BETWEEN (DATE(CURRENT_DATE) - INTERVAL (DAYOFMONTH(CURRENT_DATE)) DAY + INTERVAL 1 DAY) AND CURDATE;
SELECT * FROM table_name
WHERE date BETWEEN DATE_FORMAT(CURRENT_DATE,'%Y-%m-01') AND CURDATE;
答案 14 :(得分:0)
这里的所有回答都太复杂了。您知道当前月份的第一天是当前日期,但日期是01。您只需输入NOW()方法即可使用YEAR()和MONTH()来构建月份日期。 解决方法如下:
select * from table_name
where date between CONCAT_WS('-', YEAR( NOW() ), MONTH( NOW() ), '01') and DATE( NOW() )
CONCAT_WS()用分隔符(在本例中为破折号)连接一系列字符串。 因此,如果今天是2020-08-28,则YEAR(NOW())='2020'和MONTH(NOW())='08',那么您只需在末尾附加'01'。
Voila!
答案 15 :(得分:0)
从月份和年份中获取第一个日期和最后一个日期。
select LAST_DAY(CONCAT(year,'.',month,'.','01')) as registerDate from user;
select date_add(date_add(LAST_DAY(end_date),interval 1 DAY),interval -1 MONTH) AS closingDate from user;
答案 16 :(得分:-1)
SET @date:='2012-07-11';
SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY),
interval -1 MONTH) AS first_day