【问题标题】:Combining Fields in Oracle SQL Select Statement - Date Plus Varchar2在 Oracle SQL Select 语句中组合字段 - Date Plus Varchar2
【发布时间】:2018-02-03 01:48:08
【问题描述】:

使用 Oracle / SQL

我正在尝试在 SELECT 语句中将 DATE 字段与充当 24 小时制的 VARCHAR2(4) 字段结合起来。我还需要呈现结果并按 DATE desc 排序...我需要排序顺序也将时间考虑在内....

日期字段(日期)DD-MON-YY 时间字段 (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;

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    我会使用类似以下的 order by 子句:

    按 trunc(datefield) desc、timefield desc 排序

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

    【讨论】:

      【解决方案2】:

      尝试使用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;

      【讨论】:

      • 为什么他更喜欢 to_timestamp 而不是 to_date?
      • @miracle173 抱歉完全忘记了你的问题,这里有一个链接wiki.postgresql.org/wiki/… 为什么我一般使用 to_timestamp() 可能对于这个特殊问题没有必要,但它为特殊操作提供了更好的支持,hes试图再次发明“轮子”,我们已经有了很好的实现。特别是对于事情可能会变得复杂的日历,我认为最好将这些东西留给专业人士
      【解决方案3】:

      您发布的代码无效(缺少 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>
      

      【讨论】:

        猜你喜欢
        • 2021-02-28
        • 2011-10-15
        • 2011-07-14
        • 1970-01-01
        • 2013-10-03
        • 2015-08-13
        • 2016-01-18
        • 2018-02-16
        • 1970-01-01
        相关资源
        最近更新 更多