【问题标题】:Sybase date comparison - Correct format?Sybase 日期比较 - 格式正确吗?
【发布时间】:2013-08-10 10:54:09
【问题描述】:

我是 Sybase 的新手,正在编写一个查询以在指定日期之后以及指定日期之前返回结果。 MM/DD/YYYY 格式

目前正在做..

SELECT * 
    From aTable
      WHERE afterDate >= 08/07/2013
        AND beforeDate <= 08/08/2013

我正在取回记录,但由于我是 Sybase 新手,我想确保 Sybase 正确解释这些日期..

他们的在线文档对于此类事情的基本解释非常糟糕! 任何人都可以确认我所拥有的是否有效,或者是否需要围绕日期进行一些格式化?

【问题讨论】:

  • 目前答案中没有提到的一点是,由于日期字段通常包含时间组件,因此进行日期范围查询的最佳方法是使用“where yourfield >= startdate and yourfield

标签: sql database sybase mybatis


【解决方案1】:

您需要将日期转换为 DATETIME 并告诉 sybase 需要确定的格式。
根据this documentation,MM/DD/YYYY 的代码是 101,所以是这样的:

SELECT * 
FROM aTable
WHERE afterDate >= CONVERT(DATETIME,'08/07/2013',101)
      AND beforeDate <= CONVERT(DATETIME,'08/08/2013',101)

您可以通过运行以下选择语句来查看差异:

SELECT CONVERT(DATETIME,'08/07/2013',101)  --MM/DD/YYYY (2013-08-07 00:00:00.000)
SELECT CONVERT(DATETIME,'08/07/2013',103)  --DD/MM/YYYY (2013-07-08 00:00:00.000)

【讨论】:

  • 谢谢你 我得试试这个。我从未提到的一件事是我的查询是通过 MyBatis 调用的,所以我想知道是否会自动转换为 Sybase 接受的内容。
  • 谢谢,效果很好。已帮助我测试正确的记录被 MyBatis 拉回
【解决方案2】:

最好的方法是使用不需要任何转换的 ANSI 标准:例如 yyyymmdd(也可以包括 hh:mm:ss):

DateField1 >= "20150101" 和 DateFile1

【讨论】:

    【解决方案3】:

    对于sybase中的任何日期时间字段,不通过转换函数,有一种更直接的方法。

    SELECT * 
    From aTable
      WHERE afterDate >= '2013-08-07'
        AND beforeDate <= '2013-08-08'
    

    日期必须采用 'YYYY-MM-DD'

    格式

    如果您想添加时间,可以将其与日期一起包含在内。日期和时间必须用 T 隔开。

    任何日期时间字段都可以直接使用格式'YYYY-MM-DDTHH:MM:SS'

    函数使用时间过长。没有人需要火箭筒来射击松鼠! :)

    【讨论】:

      【解决方案4】:

      您应该决定用户将使用哪些输入字符串作为参数,然后将它们转换并按照您的意愿连接它们,除非它是日期时间,它具有哪种初始格式并不重要,您可以在两者之间使用它-条件。

      E. G。用户来自欧洲并使用“DD.MM.YY”和“hh:mm”作为输入参数,我会像这样转换和连接:

       WHERE dateCol between convert(DATETIME, 
                                     convert(char(11), 
                                             convert(DATETIME, '01.06.14', 4), 16) || ' ' || '00:00', 8) 
          AND convert(DATETIME, 
                      convert(char(11), 
                              convert(DATETIME, '01.07.14', 4), 16) || ' ' || '16:00', 8)
      

      【讨论】:

        【解决方案5】:
        CAST( '2000-10-31' AS DATE )
        

        将从文本转换为日期格式....

        我假设您的两个字段(afterDate 和 beforeDate)是日期格式。

        你的例子是:

        SELECT * 
        From aTable
          WHERE afterDate >= CAST( '08/07/2013' AS DATE )
            AND beforeDate <= CAST( '08/08/2013' AS DATE )
        

        此外,通常(但不总是)日期范围位于 SAME 字段中。正如我所说,这并非总是如此,您可能有充分的理由。

        【讨论】:

        • 谢谢,我会试一试。我的查询是写在一个 MyBatis xml 文件中的,所以知道它是否处理自动转换为 Sybase 可以处理日期的东西会很有趣
        猜你喜欢
        • 2018-09-25
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        相关资源
        最近更新 更多