Sybase日期比较 - 格式正确吗?

时间:2013-08-08 16:11:07

标签: sql database sybase mybatis

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

目前正在做..

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

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

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

5 个答案:

答案 0 :(得分:12)

您需要将日期转换为DATETIME并告诉sybase确定格式是什么 根据{{​​3}},MM / DD / YYYY的代码是101,所以像这样:

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

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

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)

答案 1 :(得分: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字段上。正如我所说,这不是一直都是如此,你可能有充分的理由。

答案 2 :(得分:3)

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

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

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

的形式

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

可以使用'YYYY-MM-DDTHH:MM:SS'

格式直接使用任何日期时间字段

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

答案 3 :(得分:1)

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

DateField1&gt; =“20150101”和DateFile1&lt; =“20150102”

答案 4 :(得分:0)

你应该决定用户将哪些输入字符串用作参数,然后转换它们并按照你想要的方式连接它们,除非它是Datetime它不重要它有哪个初始格式,你可以在它之间使用它-condition。

电子。 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)