Oracle SQL - 当列类型为NUMBER时,从YYYYMMDD中提取YYYYMM(38)

时间:2016-07-09 20:37:36

标签: sql oracle

我有一个名为DATEOFORDER的列,其类型为NUMBER(38)

当我运行SELECT查询时,我得到年 - 月 - 日结果,例如:

  

20161230,20160531或20170330

我希望实现的目的是将显示的字符数限制为仅限年月。所以我会得到以下内容:

  

201612,201605或201703

我厌倦了使用像TO_CHAR或EXTRACT这样的功能但没有成功。

4 个答案:

答案 0 :(得分:3)

您可以始终除以100以删除最后2位数字。所以这样的事情可以起作用:

select to_char(trunc(dateoforder / 100))
  from tbl

答案 1 :(得分:1)

Oracle安装程序

CREATE TABLE your_table ( dateoforder ) AS
SELECT '20161230, 20160531 or 20170330' FROM DUAL UNION ALL
SELECT '20161230' FROM DUAL UNION ALL
SELECT '20160531' FROM DUAL UNION ALL
SELECT '20170330' FROM DUAL;

<强>查询

SELECT REGEXP_REPLACE( dateoforder, '(\d{6})\d{2}', '\1' ) AS monthoforder
FROM   your_table

<强>输出

MONTHOFORDER
------------------------
201612, 201605 or 201703
201612
201605
201703

答案 2 :(得分:1)

select substr(to_char(dateoforder), 1, 6) from tbl

答案 3 :(得分:0)

您应该使用substr(string, a,b)运算符从string中选择一个子字符串,其值在ab之间,作为算法建议。

要获取字符串,您应该在dateoforder上使用to_char。