年と月が整数として別々の列に格納されているテーブルがあります。私が持っている質問は、現在の日付 (つまり、クエリが実行された日付) から過去 12 か月を取得する方法です。したがって、日付が 2013 年 2 月 15 日の場合、2013 年 2 月 15 日から 2012 年 2 月 14 日までのレコードのみを取得し、それ以外の年と月は返しません。
これを行う簡単な方法はありますか?
ありがとう
年と月が整数として別々の列に格納されているテーブルがあります。私が持っている質問は、現在の日付 (つまり、クエリが実行された日付) から過去 12 か月を取得する方法です。したがって、日付が 2013 年 2 月 15 日の場合、2013 年 2 月 15 日から 2012 年 2 月 14 日までのレコードのみを取得し、それ以外の年と月は返しません。
これを行う簡単な方法はありますか?
ありがとう
DATEADD()
1 年前の日付を検索するために使用します。
SELECT *
FROM myTable
WHERE DATEADD(year, -1, GETDATE()) >=
CONCAT(CAST(year AS varchar), CAST(month AS varchar), CAST(date AS varchar))
アイデアを提供するために、次のようなものが役立つかもしれません:
select CONVERT(datetime, CONCAT ( year, month, date ))
from your_table
そのデータベースの設計を変更することを強くお勧めします。エドガー・フランク・コッドが言ったように、日付は原子的です。つまり、小さな部分に分けることはできません (またはすべきではありません)。手遅れでない場合は、デザインを変更し、日付を日時形式にすると、日付の取得に関するあらゆる種類の問題が解消されます。日付を簡単に取得するための日付と時刻の関数が何百もあります。
(何でも) From (table) where (table's date column) between current_date() AND Dateadd(yy,-1,current_date()); を選択します。
これは、デザインを変更した場合のクエリのコードになります。それ以外の場合は、次のようにすることができます。
Select (whatever) From (table) where (table.year between (Select MAX(table.year) From table) AND (Select MAX(table.year)-1 From table)) AND table.month = (試して取得実際の月) AND table.day = (実際の日を取得してみてください);
ご覧のとおり、クエリが実行された日と月を把握するのは非常に困難です。年に関しては、最大年が実際の年であると想定しています...これはやり方ではありません。デザインを変更することを強くお勧めします。それが役に立てば幸い。