2017-06-14 7 views
1

テーブルmy_recordには、DDMMYYYYHHMMSS形式の値を持つStartDate列があります(列データ型はVARCHARです)。
テーブルグループからデータを抽出する日付はYYYYMMです。oracleの部分文字列を使用してYYYYMM形式の日付値を読み取る方法

私はMMYYYY形式でデータを抽出する以下の作業クエリを持っています。

SELECT /*+ PARALLEL(a , 8) */ 
      NVL (SUBSTR (StartDate, 3, 6), 'Total') "Year-Month",Started", 
     TO_CHAR (COUNT (1), '999,999,999') "Customer Count", 
     TO_CHAR (
       SUM (Usage)/60, 
      '999,999,999')`enter code here` 
      "Duration (M)" 
    FROM customer_records a 
    WHERE type='NEW' 
      and customer_status=0 
GROUP BY ROLLUP (to_date(SUBSTR (StartDate, 3, 6),'MMYYYY'), 'Total') 
ORDER BY 1; 

ですが、日付の書式はYYYYMMになります。
私は以下のオプションを試しました。しかし

SELECT /*+ PARALLEL(a , 8) */ 
     NVL (to_date(SUBSTR (StartDate, 3, 6),'MMYYYY'), 'Total') "Month Started", 
     TO_CHAR (COUNT (1), '999,999,999') "Customer Count", 
     TO_CHAR (
       SUM (Usage)/60, 
      '999,999,999') 
      "Duration (M)" 
    FROM customer_records a 
    WHERE type='NEW' 
      and customer_status=0 
GROUP BY ROLLUP (to_date(SUBSTR (StartDate, 3, 6),'MMYYYY'), 'Total') 
ORDER BY 1; 

は、誰かがYYYYMM形式でデータをフェッチするために、クエリの上で編集するために私を助けてくださいすることができ、動作していませんか?

答えて

1

与えられた開始日付が日付形式である場合、それ以下のものはうまく動作します。

更新:あなたはそれがdatw形式ではありませんコメントで述べたように、あなたが最初の関数

SELECT /*+ PARALLEL(a , 8) */ 
      NVL (to_CHAR(to_date(substr(StartDate, 1,8),'DDMMYYYY'),'YYYYMM'),'Total') "Month Started", 
      TO_CHAR (COUNT (1), '999,999,999') "Customer Count", 
      TO_CHAR (
        SUM (Usage)/60, 
       '999,999,999') 
       "Duration (M)" 
     FROM customer_records a 
     WHERE type='NEW' 
       and customer_status=0 
    GROUP BY ROLLUP (to_CHAR(to_date(substr(StartDate, 1,8),'DDMMYYYY'),'YYYYMM')) 
    ORDER BY 1; 
+0

は、形式がDDMMYYYYHHMMSSなのでStartdateのsubstrを取る必要があります。 – Msn

+0

その日付が日付形式の場合は、部分文字列を取る必要はありません – Rams

+0

答えに感謝します。 01481 00000 - "無効な数値書式モデル" *原因:数字を文字列 に変換しようとしています(TO_CHARを使用しているか、文字列をTO_NUMBERで数字に変換しようとしています)。 に無効な数値形式モデルパラメータ。 – Msn

-1

をTO_CHAR使用して日付フォーマットし、必要なYYYYMM形式に変換あなたが試すことができます:::

select TO_DATE(TO_CHAR(StartDate, 'MM/YYYY'), 'MM/YYYY') mmyyyyFormatDate from customer_records ; --get the date in mm/yyyy format 
関連する問題