【问题标题】:How to compare 'year to fraction' and 'year to day' DATETIME fields如何比较“年与分数”和“年与日”日期时间字段
【发布时间】:2010-11-12 01:24:50
【问题描述】:

我正在尝试编写一个选择,其中我的部分标准是比较两个 DATETIME 字段(来自两个不同的表)。一个是 Year to Fraction,另一个是 Year to Day。有没有办法编写表达式,以便分数值的年份缩短为每年?我不希望缩短输出字段,而是在逻辑本身中需要它来比较字段是否相等。

这是我想要达到的目标:

SELECT BLAH
  FROM TABLE1 T1
  JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B
                                AND T1.FIELD1 = 100
                                AND T1.TIMESTAMP = T2.WORDERDATE

T1.TIMESTAMP 是年分数,T2.WORDERDATE 是年数

任何帮助,如果可能的话,用非常简单的英语,将不胜感激!

【问题讨论】:

  • 那么“年份到分数”和“年份到日期”的概念是什么?什么使日期成为其中之一?

标签: sql datetime


【解决方案1】:

你能投射它们然后比较吗?

SELECT BLAH
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B
                            AND T1.FIELD1 = 100
                            AND CAST(FLOOR(CAST(T1.TIMESTAMP AS FLOAT)) AS DATETIME) = CAST(FLOOR(CAST(T2.WORDERDA AS FLOAT)) AS DATETIME)

【讨论】:

  • 谢谢!这非常适合我需要完成的工作。我感谢您的帮助。我试图将答案标记为有用,但由于我对该站点如此陌生,因此我没有足够的声誉来这样做。再次感谢。
【解决方案2】:

Beemer:我有一个数据字典,它专门告诉我字段是按年计算或按年计算的,我也可以直观地看到数据库中的字段长度。年到日字段只有十个位置长,而年到分数的位置要长得多。

OMG Ponies:该数据库实际上是 HP Tandem 数据库,但数据已复制到 Oracle 服务器上,我的信息正是从该服务器定位。

jon3laze:我对 CAST、FLOOR 或 FLOAT 不熟悉,但感谢您的回复。明天我会试试你的答案,看看我能不能让它工作。再次感谢。

【讨论】:

    【解决方案3】:

    我刚刚尝试了类似的东西。至少在 Tandem(或 HP NonStop)上,以下就足够了:

    SELECT BLAH
      FROM TABLE1 T1
      JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B
                                    AND T1.FIELD1 = 100
                                    AND T1.TIMESTAMP YEAR TO DAY = T2.WORDERDATE YEAR TO DAY
    

    这会将两个时间戳都转换为“YEAR TO DAY”,即格式为“YYYY-MM-DD”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多