【发布时间】:2016-07-09 20:37:35
【问题描述】:
我有一个名为DATEOFORDER 的列,它的类型是NUMBER(38)。
当我运行 SELECT 查询时,我会得到年-月-日结果,例如:
20161230、20160531 或 20170330
我希望实现的是将显示的字符数限制为仅限年月。所以我会得到以下信息:
201612、201605 或 201703
我厌倦了使用 TO_CHAR 或 EXTRACT 等函数,但没有成功。
【问题讨论】:
我有一个名为DATEOFORDER 的列,它的类型是NUMBER(38)。
当我运行 SELECT 查询时,我会得到年-月-日结果,例如:
20161230、20160531 或 20170330
我希望实现的是将显示的字符数限制为仅限年月。所以我会得到以下信息:
201612、201605 或 201703
我厌倦了使用 TO_CHAR 或 EXTRACT 等函数,但没有成功。
【问题讨论】:
您始终可以除以 100 以删除最后 2 位数字。所以这样的事情可以工作:
select to_char(trunc(dateoforder / 100))
from tbl
【讨论】:
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
【讨论】:
REGEXP_REPLACE。
select substr(to_char(dateoforder), 1, 6) from tbl
【讨论】:
您应该使用 substr(string, a,b) 运算符从 string 中选择一个子字符串,其值在 a 和 b 之间,正如 mathguy 建议的那样。
要获取字符串,您应该在 dateoforder 上使用 to_char。
【讨论】: