Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在oracle中使用子字符串读取YYYYMM格式的日期值_Sql_Oracle_Select - Fatal编程技术网

Sql 如何在oracle中使用子字符串读取YYYYMM格式的日期值

Sql 如何在oracle中使用子字符串读取YYYYMM格式的日期值,sql,oracle,select,Sql,Oracle,Select,在我的表customer_records中,有一列StartDate的值为ddmmyyyhyhmmss格式(列数据类型为VARCHAR)。 我想按日期以YYYYMM格式从表组中提取数据 SELECT /*+ PARALLEL(a , 8 ) */ NVL (SUBSTR (StartDate, 3, 6), 'Total') "Year-Month",Started", TO_CHAR (COUNT (1), '999,999,999') "Customer

在我的表customer_records中,有一列StartDate的值为
ddmmyyyhyhmmss
格式(列数据类型为VARCHAR)。
我想按日期以
YYYYMM
格式从表组中提取数据

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;
我有以下工作查询:它将以
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;

有人能帮我编辑上面的查询,以获取
yyyym
格式的数据吗?

如果给定的startdate是日期格式的,那么下面的一个就可以了

更新:正如您在评论中提到的,它不是datw格式,然后您首先使用to_char函数将其转换为日期格式,然后再转换为所需的YYYYMM格式

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;

如果给定的startdate是日期格式,那么下面的一个将很好地工作

更新:正如您在评论中提到的,它不是datw格式,然后您首先使用to_char函数将其转换为日期格式,然后再转换为所需的YYYYMM格式

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;
你可以试试:::

select TO_DATE(TO_CHAR(StartDate, 'MM/YYYY'), 'MM/YYYY') mmyyyyFormatDate from customer_records ;  --get the date in mm/yyyy format
你可以试试:::

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

需要使用Startdate的substr,因为其格式为DDMMYYHYHMMSS。如果该日期为日期格式,则无需使用substr谢谢您的回答。但由于以下错误而失败:01481。00000-“无效的数字格式模型”*原因:用户试图通过to_CHAR将数字转换为字符串,或通过to_number将字符串转换为数字,并提供了无效的数字格式模型参数。更正后,列数据类型为VARCHAR。不是约会。抱歉,运气不好。失败,出现以下错误:ORA-01810:格式代码出现两次01810。00000-“格式代码出现两次”*原因:*操作:需要使用Startdate的substr,因为它的格式是ddmmyyyhhmmss。如果该日期为日期格式,则不需要使用substring谢谢您的回答。但由于以下错误而失败:01481。00000-“无效的数字格式模型”*原因:用户试图通过to_CHAR将数字转换为字符串,或通过to_number将字符串转换为数字,并提供了无效的数字格式模型参数。更正后,列数据类型为VARCHAR。不是约会。抱歉,运气不好。失败,出现以下错误:ORA-01810:格式代码出现两次01810。00000-“格式代码出现两次”*原因:*操作: