我试图使用选择查询显示前一天的Sybase日期:
select dateadd(day,-1,convert(char(10), getdate(), 23))
此查询显示为2015-06-18 00:00:00.0
我希望输出为2015-06-18
。
我怎么能得到它?
答案 0 :(得分:2)
Try select dateadd(day,-1,convert(Date, getdate(), 365))
答案 1 :(得分:0)
你告诉它给你什么:mm:ss,这就是你得到的东西。
转化中的23
是yyyy-mm-ddTHH:mm:ss
的格式代码。没有代码可以获得yyyy-mm-dd,最接近的是105(dd-mm-yy
)或110 (mm-yy-dd
)。
如果您需要yyyy-mm-dd,那么您必须将日期转换为字符串(char或varchar),并截断您不想要的部分。
答案 2 :(得分:0)
嗯,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 )
答案 3 :(得分:0)
尝试选择转换(char(10),dateadd(day,-1,getdate()),23)
Dateadd期望将date参数作为第三个参数。在你的例子中,你给它喂了一个char(10)。尽管Sybase支持从Char-> DateTime进行隐式转换,但在这种情况下我不会编码依赖它。