7

我对 Sybase 很陌生,正在编写一个查询以在指定日期之后以及指定日期之前返回结果。MM/DD/YYYY 格式

目前我在做..

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

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

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

4

5 回答 5

14

您需要将日期转换为 DATETIME 并告诉 sybase 要确定的格式。
根据这个文档,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)
于 2013-08-08T16:50:39.257 回答
7

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

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

日期必须采用“YYYY-MM-DD”格式

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

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

使用这些功能太长了。没有人需要火箭筒来射击松鼠!:)

于 2015-03-10T13:11:23.713 回答
4
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 字段中。正如我所说,这并非总是如此,您可能有充分的理由。

于 2013-08-08T16:44:36.733 回答
2

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

DateField1 >= "20150101" 和 DateFile1 <= "20150102"

于 2015-03-11T17:54:24.977 回答
0

您应该决定用户将使用哪些 Input-Strings 作为参数,然后将它们转换并根据需要连接它们,除非它是 Datetime,它具有哪种初始格式并不重要,您可以在中间条件下使用它。

例如。用户来自欧洲并使用“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)
于 2014-08-01T12:42:49.187 回答