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 如何将日期转换为月数?_Sql_Oracle_Sqldatetime - Fatal编程技术网

Sql 如何将日期转换为月数?

Sql 如何将日期转换为月数?,sql,oracle,sqldatetime,Sql,Oracle,Sqldatetime,我的表中有一列月份。月份名称和日期存储在此月份列中,如 Month 01-JAN-12 02-FEB-12 等等 如何将日期转换为月份号,例如 Month 1 2 等等。使用TO_CHAR函数,如TO_CHAR(我的'MM'列) 对于您的特定格式,您需要将格式转换器转换为_CHAR(month,'FmMM')(感谢Nicholas Krasnov的这一技巧) 如果您的month列不是日期类型,则首先需要将其转换为日期:to_CHAR(to_date(month,'DD Mon

我的表中有一列月份。月份名称和日期存储在此月份列中,如

Month    
01-JAN-12 
02-FEB-12 
等等

如何将日期转换为月份号,例如

Month
1 
2 

等等。

使用
TO_CHAR
函数,如
TO_CHAR(我的'MM'列)

对于您的特定格式,您需要将格式转换器
转换为_CHAR(month,'FmMM')
(感谢Nicholas Krasnov的这一技巧)

如果您的
month
列不是日期类型,则首先需要将其转换为日期:
to_CHAR(to_date(month,'DD Mon IY'),'FmMM')
您也可以使用“DatePart”函数:

非常适合这种情况

EXTRACT提取并返回指定日期时间字段的值


完全同意在Oracle提供内置功能时编写案例:

SELECT EXTRACT(MONTH FROM DATE '2012-03-15') FROM DUAL;

SELECT EXTRACT(MONTH FROM TO_DATE('01-JAN-12', 'DD-MON-RR')) month_to_number FROM DUAL;

select to_number(to_char(to_date('01-JAN-12','dd-mon-yy'),'mm')) month_to_number from     dual;

select to_number(to_char(trunc(sysdate), 'mm')) month_to_number from dual;

datepart函数很容易做到这一点

SELECT DATEPART(m, getdate()) 

month
的数据类型是什么?转到
datepart(month,getdate())
@NicholasKrasnov谢谢:我不知道这种格式技巧。这是到Hyperion文档的链接,这不适用于常规的Oracle RDBMS。当Oracle的内置功能可以做到这一点时,为什么要写一个糟糕的CASE语句?实际上并没有解决OP的问题,即将月份作为数字而不是名称来获取。@APC:huh?Extract(month from dte)返回##,上面显示的“dte”列只是with子句返回的日期。我添加了空格以使这一点更加明显,但extract返回了一个数字……这篇文章显然被标记为ORACLE。此解决方案不是ORACLE。请记住:
TO_CHAR()
返回字符串,而不是数字。一个重要的考虑因素,因为'01'!='1'
MONTH       DTE
1           January, 30 2012 00:00:00+0000
2           February, 28 2012 00:00:00+0000
3           March, 28 2012 00:00:00+0000
4           April, 26 2012 00:00:00+0000
5           May, 25 2012 00:00:00+0000
6           June, 23 2012 00:00:00+0000
7           July, 22 2012 00:00:00+0000
8           August, 20 2012 00:00:00+0000
9           September, 18 2012 00:00:00+0000
10          October, 17 2012 00:00:00+0000
11          November, 15 2012 00:00:00+0000
12          December, 14 2012 00:00:00+0000
select 
to_char(to_date('01-JAN-12','dd-mon-yy'),'mm') from dual;
SELECT EXTRACT(MONTH FROM DATE '2012-03-15') FROM DUAL;

SELECT EXTRACT(MONTH FROM TO_DATE('01-JAN-12', 'DD-MON-RR')) month_to_number FROM DUAL;

select to_number(to_char(to_date('01-JAN-12','dd-mon-yy'),'mm')) month_to_number from     dual;

select to_number(to_char(trunc(sysdate), 'mm')) month_to_number from dual;
SELECT DATEPART(m, getdate())