2015-06-19 69 views
0

我试图用一个选择查询,以显示前一天的日期的Sybase:显示当前日期-1在Sybase

select dateadd(day,-1,convert(char(10), getdate(), 23)) 

此查询显示为2015-06-18 00:00:00.0

我期望输出为2015-06-18

我该怎么做?

回答

0

你告诉它给你hh:mm:ss,这就是你所得到的。

23转换内部是yyyy-mm-ddTHH:mm:ss格式的代码没有代码以获取YYYY-MM-DD,你可以得到的最接近的是105(dd-mm-yy)或110(mm-yy-dd)。

如果您需要yyyy-mm-dd,那么您必须将日期转换为字符串(char或varchar),并截断不需要的部分。

Converting Datetime

0

嘛,datetime是二进制类型。它如何格式化以供显示取决于您。

getdate()返回代表当前日期/时间的datetime。并且dateadd()返回一个datetimedate值,具体取决于它以什么开始(在您的情况下,这将是datetime)。当您运行select语句时,它将使用为Sybase实例配置的默认格式转换为字符串。因此你的结果。

概括地说,你是:

  • 转换的datetime值CHAR(10),以获得一个ISO 8601格式的日期字符串(yyyy-mm-dd)。
  • 转换该datetime值(因此时间分量是开始的日)
  • 减去一天。

得到你想要的东西(昨天的日期),最简单的方法是这样的:

dateadd(day,-1, convert(date,getdate())) 

其中,格式化显示时,会出来,就像这样(取决于配置的默认格式的Sybase实例)yyyy-mm-dd

或者它可能会出现,如November 29, 2015。如果你想确保它是一个ISO 8601的日期表示,你需要明确它,并投它一charvarchar,即:

convert(char(10) , dateadd(day,-1, convert(date,getdate())) , 23) 

它给你留下包含昨天的日期char(10)值。

如果Sybase的版本不支持date,你就必须退回到你在做什么,但这样的事情:

convert(char(10) , dateadd(day,-1, getdate()) , 23) 
1

尽量选择DATEADD(天,-1,转换(日期,GETDATE(),365))

0

尝试选择转换(CHAR(10),DATEADD(天,-1,GETDATE()),23)

DATEADD预计日期参数作为第三个参数。在你的例子中,你给它一个char(10)。尽管Sybase支持Char-> DateTime的隐式转换,但在这种情况下,我不会编码依赖它。