Sql 如何在oracle中使用子字符串读取YYYYMM格式的日期值
在我的表customer_records中,有一列StartDate的值为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
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-“格式代码出现两次”*原因:*操作: