57

今月の1日から当日の間にMySQLデータベースからデータを選択する必要があります。

select*from table_name 
where date between "1st day of current month" and "current day"

誰かがこのクエリの実用的な例を提供できますか?

4

17 に答える 17

156
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() )
于 2012-08-04T11:24:55.123 に答える
30

クエリで月の最初の日を使用する必要がある同様のクエリを探していました。この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
于 2014-04-24T06:41:14.407 に答える
5
select * from table_name 
where `date` between curdate() - dayofmonth(curdate()) + 1
                 and curdate()

SQLFiddleの例

于 2012-08-04T11:26:53.363 に答える
3

次のクエリを使用しました。それは過去に私にとって素晴らしい働きをしました。

select date(now()) - interval day(now()) day + interval 1 day
于 2017-01-07T00:13:47.287 に答える
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);
于 2016-12-07T10:17:09.957 に答える
1
select * from table
where date between 
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date;
于 2013-11-11T03:02:20.357 に答える
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);
于 2014-10-24T13:17:06.927 に答える
1
select * from <table>
where <dateValue> between last_day(curdate() - interval 1 month + interval 1 day)
                  and curdate();
于 2017-09-24T04:31:01.637 に答える
1

私が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;

今日は2019-10-08なので、出力は次のようになります

@firstOfLastLastMonth = '2019-08-01'
@lastOfLastLastMonth = '2019-08-31'
@firstOfLastMonth = '2019-09-01'
@lastOfLastMonth = '2019-09-30'
@firstOfMonth = '2019-10-01'
@today = '2019-10-08'
于 2019-10-08T18:52:53.040 に答える
0

あまり正統でないアプローチは

SELECT * FROM table_name 
WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7)
  AND table_name.date <= CURDATE();

月の最初から現在までの日付は、今月以前の日付と同じです。ただし、これは他のアプローチよりも目には少し簡単だと思います。

于 2016-10-05T14:39:52.370 に答える
0
SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month;
于 2017-03-15T14:10:40.600 に答える
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
于 2018-08-07T05:01:45.620 に答える
0

私には似たような要件がいくつかありましたが、プロファイルページでユーザーが選択しfind first day of the monthたものに基づいています。year end month

問題の説明-txnsユーザーが会計年度に行ったすべてのことを見つけます。月の値Financial yearを使用して決定されます。ここで、任意の有効な月を指定できます- 、、、、...。year endmonth1 for Jan2 for Feb3 for Mar12 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までの値)です。

于 2018-08-10T09:53:56.707 に答える
0

ここで重要なのは、月の最初の日を取得することです。そのために、いくつかのオプションがあります。パフォーマンスに関して、私たちのテストは、それらの間に有意差がないことを示しています-私たちはこのトピックに関するブログ記事全体を書きました。私たちの調査結果は、本当に重要なのは、結果を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;
于 2019-11-16T16:09:37.580 に答える
0

ここでのすべての応答は非常に複雑です。あなたは今月の最初が現在の日付ですが、日付が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'を追加する必要があります。

出来上がり!

于 2020-08-28T17:01:55.097 に答える
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;
于 2021-04-09T06:31:48.813 に答える
-1
SET @date:='2012-07-11';
SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY), 
       interval -1 MONTH) AS first_day
于 2016-07-23T02:18:00.643 に答える