我是Sybase的新手,我正在编写一个查询,以便在指定日期之后以及指定日期之前返回结果。 MM / DD / YYYY格式
目前正在做..
SELECT *
From aTable
WHERE afterDate >= 08/07/2013
AND beforeDate <= 08/08/2013
我正在收回记录,但由于我是Sybase的新手,我想确保Sybase正确地解释这些日期。
他们的在线文档对于这类事情的基本解释非常糟糕! 任何人都可以确认我的工作是否有效,或者是否需要对日期进行一些格式化?
答案 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)