组合Oracle SQL Select语句中的字段 - Date Plus Varchar2

时间:2018-02-02 15:47:35

标签: sql oracle oracle11g

使用Oracle / SQL

我正在尝试将DATE字段与VARCHAR2(4)字段组合在一起,该字段在SELECT语句中充当24小时时间。我还需要提供结果并按DATE desc排序...我需要排序顺序也要花时间考虑....

datefield(日期)DD-MON-YY timefield(varchar2)示例1535或0432

我是否将其保留为Date字段或Varchar2字段,如何实现此目的?

这是我到目前为止所拥有的

select 
to_date(to_char(datefield, 'DD-MON-YY') || ' ' || timefield, 'DD_MON_YY HH24MI') as date_selected
order by 
to_date(to_char(datefield, 'DD-MON-YY') || ' ' || timefield, 'DD_MON_YY HH24MI') desc;

3 个答案:

答案 0 :(得分:0)

我会使用order by子句,如:

  

按trunc(datefield)desc命令,timefield desc

trunc()丢弃DATE列中的任何时间元素(实际上是Oracle中的DATETIME值),然后是时域上的二阶排序。

答案 1 :(得分:0)

尝试使用to_timestamp()代替to_date()

select to_timestamp(to_char(datefield, 'DD-MON-YY') || ' ' || 'timefield', 'DD_MON_YY HH24MI') as date_selected order by to_timestamp(to_char(datefield, 'DD-MON-YY') || ' ' || 'timefield', 'DD_MON_YY HH24MI') desc;

答案 2 :(得分:0)

您发布的代码无效(错过了FROM子句)。

由于DATEFIELD列的数据类型为DATE,因此需要将其转换为字符串(使用TO_CHAR和所需的格式掩码)。然后,将该字符串与另一个字符串(这是一个TIMEFIELD列)连接起来。最后,排序可以由这两列完成。

以下是一个例子:

SQL> create table test
  2  (
  3     datefield   date,
  4     timefield   varchar2 (4)
  5  );

Table created.

SQL> insert into test
  2       values (sysdate, '1850');

1 row created.

SQL> insert into test
  2       values (sysdate + 8, '0812');

1 row created.

SQL>
SQL>   select to_char (datefield, 'dd-mon-yy') || ' ' || timefield date_selected
  2      from test
  3  order by datefield desc, timefield desc;

DATE_SELECTED
--------------
10-feb-18 0812
02-feb-18 1850

SQL>