2017-06-14 27 views
1

在我的表customer_records中有一列StartDate,其值爲DDMMYYYYHHMMSS格式(列數據類型爲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

如果給定的startdate是日期格式,那麼下面的一個會很好。

更新:正如你在它是不是在datw格式的評論都提到,那麼你首先將它轉換成日期格式則需要YYYYMM格式使用TO_CHAR函數

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

需要採取Startdate的substr,因爲它的格式是DDMMYYYYHHMMSS。 – Msn

+0

如果該日期的日期格式爲 – Rams

+0

,則無需採取子字符串感謝您的答案。但失敗的錯誤號爲:01481. 00000 - 「無效數字格式型號」 *原因:用戶正試圖通過TO_CHAR將字符串轉換爲字符串 或通過TO_NUMBER將字符串轉換爲數字並且 提供了無效號碼格式模型參數。 – Msn

-1

你可以嘗試:::

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