2017-08-12 121 views
1

查詢即時的新手,我想只提取月份和年份讓我怎麼做,我嘗試使用date_part數,但其只能提取一個月如何獲得單月和今年postgre

select 
case when 
date_part('day', now()) >=25 then date_part('month', now()) 
else date_part('month', now())-1 end 

任何人都可以幫我

+1

編輯你的問題,並提供樣本數據,預期的效果,和*規格*什麼年份和月份。 –

回答

1

您可以使用EXTRACT函數從DATE中提取月份,年份和日期。

以下是使用它可以實現您發佈的問題的查詢。

SELECT CASE 
      WHEN (extract(DAY 
         FROM CURRENT_DATE) >= 25) THEN (extract(MONTH 
                   FROM CURRENT_DATE)) 
      ELSE (extract(MONTH 
         FROM CURRENT_DATE) - 1) 
     END; 

結果:

enter image description here

由於今天是本月的第12天,返回7(上月)。您可以檢查DEMO here

編輯

如果你想提取的年月兩者單獨提取出來並連接它。 以下是更新後的查詢。

SELECT CASE 
      WHEN (extract(DAY 
         FROM CURRENT_DATE) >= 25) THEN (extract(MONTH 
                   FROM CURRENT_DATE) || ', ' || extract(Year FROM CURRENT_DATE)) 
      ELSE (extract(MONTH 
         FROM CURRENT_DATE) - 1 || ', ' || extract(Year FROM CURRENT_DATE)) 
     END; 

檢查演示here

+0

謝謝你,先生:) – PinballWizard

1

您所查詢的完美。
請參閱this demo:


今天是2017-08-12和查詢提供了8-1 = 7預期

select 
case when date_part('day', now()) >=25 
    then date_part('month', now()) 
    else date_part('month', now())-1 
end 
; 

| case | 
|------| 
| 7 | 

另外兩個情況下工作太細:

select 
case when date_part('day', date '2017-08-12') >=25 
    then date_part('month', date '2017-08-12') 
    else date_part('month', date '2017-08-12')-1 
end 
; 
| case | 
|------| 
| 7 | 

select 
case when date_part('day', date '2017-08-26') >=25 
    then date_part('month', date '2017-08-26') 
    else date_part('month', date '2017-08-26')-1 
end 
; 
| case | 
|------| 
| 8 | 
+0

我querry只顯示月份,如果我想提取月份和年份,我該怎麼做,先生? – PinballWizard

0

我真的不知道你想要的結果是什麼,但是要從日期中提取年/月/其他任何東西,你可以使用TO_CHAR函數。

例如:

select to_char(current_timestamp, 'YYYY'), to_char(current_timestamp, 'MONTH'); 

select to_char(current_timestamp, 'YYYY-MM'); 

要添加分鐘/小時/天/月/年的任何一個日期使用間隔操作就像這樣:

select to_char(now() + interval '1' month, 'YYYY-MM'); 

您可以添加許多間隔一次:

select to_char(now() + interval '1' month + interval '-1' year, 'YYYY-MM'); 

Here are all template patterns for Date/Time Formatting.

+0

我上面的查詢結果只顯示月份,但我想顯示月份和年份還有sir – PinballWizard

+0

您是否想在單列內使用一個月和一年?只需使用不同的模式:選擇to_char(current_timestamp,'YYYY-MM')或選擇to_char(current_timestamp,'YYYY-MONTH')。 –

+0

是啊這就是即時通訊設法實現,但爲什麼不能從選擇to_char(now(),'day') - 1? – PinballWizard

0

試試這個,你可以通過使用獲得字符串中的數字表示:

select to_char(current_timestamp, 'YYYY') as Year, to_char(current_timestamp, 'MONTH') as Month;