使用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;
答案 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>