我试图用一个选择查询,以显示前一天的日期的Sybase:显示当前日期-1在Sybase
select dateadd(day,-1,convert(char(10), getdate(), 23))
此查询显示为2015-06-18 00:00:00.0
我期望输出为2015-06-18
。
我该怎么做?
我试图用一个选择查询,以显示前一天的日期的Sybase:显示当前日期-1在Sybase
select dateadd(day,-1,convert(char(10), getdate(), 23))
此查询显示为2015-06-18 00:00:00.0
我期望输出为2015-06-18
。
我该怎么做?
你告诉它给你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),并截断不需要的部分。
嘛,datetime
是二进制类型。它如何格式化以供显示取决于您。
getdate()
返回代表当前日期/时间的datetime
。并且dateadd()
返回一个datetime
或date
值,具体取决于它以什么开始(在您的情况下,这将是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的日期表示,你需要明确它,并投它一char
或varchar
,即:
convert(char(10) , dateadd(day,-1, convert(date,getdate())) , 23)
它给你留下包含昨天的日期char(10)
值。
如果Sybase的版本不支持date
,你就必须退回到你在做什么,但这样的事情:
convert(char(10) , dateadd(day,-1, getdate()) , 23)
尽量选择DATEADD(天,-1,转换(日期,GETDATE(),365))
尝试选择转换(CHAR(10),DATEADD(天,-1,GETDATE()),23)
DATEADD预计日期参数作为第三个参数。在你的例子中,你给它一个char(10)。尽管Sybase支持Char-> DateTime的隐式转换,但在这种情况下,我不会编码依赖它。