2017-09-07 12 views
0

完全な日付から抽出月と年の問合せはどのようなものですか。 私のデータは、このようなものです:2008年1月29日 私はこのクエリを試してみました:oracleの日付から月と年を抽出します

select ID_NO, CHECKED_DATE, to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY') AS A 
from Doctor_Checkup; 

が、それは出力が得られます:2008年1月1日

予想される出力:1から2008

+0

私はあなたが私のようA' –

答えて

1

を、あなたは単にCASことができますあなたが望む形式にT:

select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'mm-yyyy'),'0') AS A from Doctor_Checkup; 

それがテキスト列である場合は、あなたが最初の形式で日付にキャストする必要があります。

select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(TO_DATE(CHECKED_DATE,'dd/mm/yyyy'),'mm-yyyy'),'0') AS A from Doctor_Checkup; 
1

1-2008形式は先行ゼロトリミングして、次の形式を使用します取得するには:フィールドにはすでに日付列である場合

select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'MM-YYYY'),'0') AS A from Doctor_Checkup; 
4

日付形式を持っていない - それはstored internally to the databaseは7バイト(年、月、日、時、分、秒を表します)で、使用しているユーザーインターフェイスSQL/Plus、SQL Developer、Javaなど)は、それをユーザー、ユーザーに表示しようとし、日付が形式を持つ意味のあるもの(通常は文字列)に変換します。

日付には、年、月、日、時、分、秒の各コンポーネントが常に含まれています。こう:

to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY') 

を効果的に行うことと同じです:

TRUNC(Checked_Date, 'MM') 

を、まだ日、時、分、秒のコンポーネントを持っていますが、月の最初の日の深夜に切り捨てされているでしょう。ユーザーインターフェイスは、時間コンポーネントを表示しないように設定されている(ただし、日付には時刻が表示されます)。

何がやりたいことはフォーマットされた日付を文字列に変換します:

select ID_NO, 
     CHECKED_DATE, 
     TRIM(LEADING '0' FROM TO_CHAR(CHECKED_DATE, 'MM-YYYY')) AS A 
from Doctor_Checkup; 

または

select ID_NO, 
     CHECKED_DATE, 
     EXTRACT(MONTH FROM CHECKED_DATE) 
     || '-' || EXTRACT(YEAR FROM CHECKED_DATE) AS A 
from Doctor_Checkup; 
+0

全く同じソリューションとして、この 'to_char関数(checked_date、 'MM-YYYY')をしたいと思いますが、2分と日付について素早く分かりやすく解説しています。よくやった。 –

1

あなたが形式の月と年を表す文字列をしたい[M] M-YYYY 。オラクルのTO_CHARはMM-YYYYのみをサポートしているため、もしあれば、先行するゼロを取り除かなければなりません。

2種類の溶液:

trim(leading '0' from to_char(checked_date, 'mm-yyyy')) 

または

extract(month from checked_date) || '-' || extract(year from checked_date) from dual 
関連する問題