今月の1日から当日の間にMySQLデータベースからデータを選択する必要があります。
select*from table_name
where date between "1st day of current month" and "current day"
誰かがこのクエリの実用的な例を提供できますか?
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() )
クエリで月の最初の日を使用する必要がある同様のクエリを探していました。この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
select * from table_name
where `date` between curdate() - dayofmonth(curdate()) + 1
and curdate()
次のクエリを使用しました。それは過去に私にとって素晴らしい働きをしました。
select date(now()) - interval day(now()) day + interval 1 day
これを試して :
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);
select * from table
where date between
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date;
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);
select * from <table>
where <dateValue> between last_day(curdate() - interval 1 month + interval 1 day)
and curdate();
私がeコマースストアで実行しているいくつかのビジネスインテリジェンスクエリに対してこれと同じクエリが必要になった後、私はここにいることに気づきました。他の人に役立つかもしれないので、自分のソリューションを追加したかったのです。
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'
あまり正統でないアプローチは
SELECT * FROM table_name
WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7)
AND table_name.date <= CURDATE();
月の最初から現在までの日付は、今月以前の日付と同じです。ただし、これは他のアプローチよりも目には少し簡単だと思います。
SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month;
これ使った
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
私には似たような要件がいくつかありましたが、プロファイルページでユーザーが選択しfind first day of the month
たものに基づいています。year end month
問題の説明-txns
ユーザーが会計年度に行ったすべてのことを見つけます。月の値Financial year
を使用して決定されます。ここで、任意の有効な月を指定できます- 、、、、...。year end
month
1 for Jan
2 for Feb
3 for Mar
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)
ここで、?
はyear end
月(1から12までの値)です。
ここで重要なのは、月の最初の日を取得することです。そのために、いくつかのオプションがあります。パフォーマンスに関して、私たちのテストは、それらの間に有意差がないことを示しています-私たちはこのトピックに関するブログ記事全体を書きました。私たちの調査結果は、本当に重要なのは、結果をVARCHAR、DATETIME、またはDATEにする必要があるかどうかであることを示しています。
月の最初の日を取得するという実際の問題に対する最速の解決策は、VARCHARを返します。
SELECT CONCAT(LEFT(CURRENT_DATE, 7), '-01') AS first_day_of_month;
2番目に速いソリューションはDATETIMEの結果をもたらします-これは前のソリューションよりも約3倍遅く実行されます:
SELECT TIMESTAMP(CONCAT(LEFT(CURRENT_DATE, 7), '-01')) AS first_day_of_month;
最も遅いソリューションはDATEオブジェクトを返します。私を信じないの?このSQLFiddleを実行して、自分の目で確かめてください
あなたの場合、値をテーブル内の他の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;
ここでのすべての応答は非常に複雑です。あなたは今月の最初が現在の日付ですが、日付が01であることを知っています。YEAR()とMONTH()を使用するだけで、NOW()メソッドを入力して月の日付を作成できます。解決策は次のとおりです。
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'を追加する必要があります。
出来上がり!
月と年から最初の日付と最後の日付を取得します。
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;
SET @date:='2012-07-11';
SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY),
interval -1 MONTH) AS first_day