如何将Varchar转换为Date

时间:2017-11-21 13:00:57

标签: sql oracle

我正在尝试制作试算平衡报告

我有一个名为'PERIOD_NAME'的字段,用于存储会计期间名称

我的问题是:是否可以将“PERIOD_NAME”(“VARCHAR2”)转换为“DATE” 为了对ASC进行分类,给我这个结果

jan- 16
jan- 17
Feb- 16
Feb- 17

2 个答案:

答案 0 :(得分:2)

假设TO_DATE( string, format_model, nls_settings )PERIOD_NAME类似,请使用jan-17(但您的问题不清楚具体格式是什么):

SELECT TO_DATE( period_name, 'MON-YY', 'NLS_DATE_LANGUAGE=English' )
FROM   your_table;

如果您想按月按年排序,那么您可以使用EXTRACT获取月份或年份并对其进行排序:

SELECT *
FROM   (
  SELECT TO_DATE( period_name, 'MON-YY', 'NLS_DATE_LANGUAGE=English' ) AS period_date
  FROM   your_table
)
ORDER BY EXTRACT( MONTH FROM period_date ),
         EXTRACT( YEAR FROM period_date );

答案 1 :(得分:1)

我认为这就是你追求的目标?基本上,我已经使用to_date将句点名称转换为日期,然后分别提取月份和年份以用于排序。希望这有帮助!

数据

CREATE TABLE my_table 
(
  col1 VARCHAR2(10)
)  ;
INSERT INTO my_table VALUES ('jan- 16');
INSERT INTO my_table VALUES ('jan- 17');
INSERT INTO my_table VALUES ('Feb- 16');
INSERT INTO my_table VALUES ('Feb- 17');

<强>解决方案

SELECT t.*
  FROM my_table t
 ORDER BY to_char(to_date(col1, 'mon- yy'), 'mm'),
          to_char(to_date(col1, 'mon- yy'), 'yy')

结果

COL1

jan-16

jan-17

2月16日

2月17日