查询中的字符串到日期转换

时间:2016-09-20 18:49:05

标签: sql oracle

我有以下"时间戳"在专栏

Mon Aug 10 12:24:46 CDT 2016

所以为了转换成日期,我正在做以下事情。

select * from 
(select TO_DATE(SUBSTR(t.timestamp,9,2) || '-' || SUBSTR(t.timestamp,5,3) ||             
'-' || SUBSTR(t.timestamp,27,2), 'DD-MON-YY')  from table t where 
 t.LENGTH(TRIM(t.timestamp)) = 28 as date) where date <= sysdate;

这样做的原因是,&#34; Oracle sysdate&#34;以下列格式返回当前日期

20-SEP-16

因此,为了比较oracle sysdate,我正在使用上述方法。

有没有更好的方法来做到这一点,我知道在select语句中使用一组子字符串并且因为我的&#34;时间戳&#34;这是低效的。值太长,我无法转换为ORACLE日期。

我使用oracle 11作为我的数据库。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

这是一个概念证明,假设所谓的“时间戳”实际上是一个字符串。如果它是带有时区的正确时间戳(因为它应该),那么它甚至更简单,您可以直接与日期进行比较。

注意两件事:在我的映射中,由于某些原因我没有“CDT”,但我确实有标准的时区,CST。我可能错过了夏令时文件,我不在乎追捕和安装。 2016年8月10日是星期三;周一不行,你不能骗过Oracle。不知道为什么你不打算使用实际的正确日期(包括一周中正确的日期)。

编辑:实际上我没有遗漏任何“时区代码文件”;相反,要将CDT识别为有效时区,下面模型中的TZR组件需要更改为TZD。

概念证明:

select 'x' as col1
from   dual
where  to_timestamp_tz('Wed Aug 10 12:24:46 CST 2016', 
                       'Dy Mon dd hh24:mi:ss TZR yyyy') <=   sysdate
;



COL1
-----
x

1 row selected.

答案 1 :(得分:1)

  1. as date位置错误。
  2. &#39;八月&#39;是某种语言的月份名称缩写。在to_char中指定该语言,以确保其独立于您当前的设置。
  3. 当你有YYYY时,不要只使用YY。
  4. 最后有时区&#39; CDT&#39;。是不是总是&#39; CDT&#39;或者它可能是别的什么?如果您需要从一个时区到另一个时区,您必须先将时区转换为时区,然后转到另一个时区,然后转换为日期。
  5. 以下是查询:

    select * 
    from
    (
      select 
        cast(from_tz(cast("date" as timestamp), zone) at time zone 'CDT' as date) as "date"
      from 
      (
        select to_date(substr(t.timestamp,9,2) || '-' || 
                       substr(t.timestamp,5,3) || '-' || 
                       substr(t.timestamp,25,4), 
                       'DD-MON-YY', 
                       'NLS_DATE_LANGUAGE=AMERICAN') as "date",
               substr(t.timestamp,21,3) as zone
        from table t 
        where t.length(trim(t.timestamp)) = 28
      ) 
    )
    where "date" <= sysdate;
    

    尽管其名称from_tz并未从时区转换,但是从时间戳转换时区到时间戳 时区。因此我们使用它来将我们的时区信息放入。timestamp at time zone 'xyz'另一方面将时区移动到指定的时区(我们解释我们的日期驻留的时区)。 cast用于从日期到时间戳,反之亦然。

答案 2 :(得分:-2)

您可以使用TO_CHAR函数提取日期格式 documentation