WHERE句にcase文を書く必要があります。- current_dateがMonthの1番目のときにデータを選択します。前の月の最初の日と前の月の前月 ELSE FROM 1st Curr月の日付まで。私はこれまでこれを書いてきましたが、うまくいきません。 '05/01/2017 'は入力日となります。TERADATAの場合WHERE節の文
SELECT *
FROM MyTable
WHERE calendar_date
BETWEEN
CASE WHEN extract (day from CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY')) =1 --check to see date is 1st of month
THEN ADD_MONTHS((CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY') - EXTRACT(DAY FROM CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY'))+1), -1) --1st of prev month
AND ADD_MONTHS(CURRENT_DATE - EXTRACT(DAY FROM CURRENT_date), 0) --last day prev month
ELSE CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY') - EXTRACT(DAY FROM CAST('05/01/2017' AS DATE FORMAT 'MM/DD/YYYY'))+1, 0) --else 1st of Curr mont
AND CURRENT_DATE
end
order by calendar_date
ちょっとした提案ですが、SELECT句で必要なフィールドを派生させて、インライン表示(サブクエリ)でラップすることができます。条件付きロジックから派生した値を見ることができれば、コードを読みやすく(そしてデバッグしやすく)することができます。 – Sevyns
@Sevyns、あなたはあなたが提案しているものの例を教えてください。 – SilverFish
開始日のリテラルは、 'date '2017-05-01''のように' select date'と書かれています。2017-05-01 '+ 1' –