2011-03-10 74 views

回答

9

试试这个:

SELECT REPLACE(CONVERT(VARCHAR, DATEADD(dd, -1, GETDATE()), 102), '.', '-') 

GETDATE()返回当前的日期/时间。

DATEADD(dd, -1, GETDATE())从当前日期/时间一天减少。

CONVERT(VARCHAR, @DATE, 102)日期转换为ANSI格式yyyy.mm.dd

和REPLACE将带有连按你的例子​​替换预定义的格式周期。

+0

110应该在SQL中返回格式化的mm-dd-yyyy http://www.w3schools.com/sql/func_convert.asp – iivel 2011-03-10 19:16:39

2

SELECT CONVERT(varchar, DATEADD(d,-1,GETDATE()), 110) 


SELECT CAST(DATEADD(d,-1,GETDATE()) AS DATE) AS 'DATE' 

很好的参考,如果你再次需要这些代码。 http://www.w3schools.com/sql/func_convert.asp

+0

哦,这是昨天的日期? – WillIAM 2011-03-10 18:54:41

+0

因为我刚刚阅读您的示例代码,所以错过了“昨天”一词。我将dateadd函数添加到我的代码中。 – iivel 2011-03-10 18:59:15

+0

不,这是我的错,我没有在描述中指定...我很惭愧 – WillIAM 2011-03-10 19:12:03

9

对于2008年,你可以利用新的数据类型DATE的:

SELECT CAST(DATEADD(d,-1,GETDATE()) AS DATE) AS Yesterday 

对于所有版本:

SELECT CONVERT(CHAR(10), DATEADD(d,-1,GETDATE()), 120) AS Yesterday 

显然,每种方法返回的数据类型是不同的。

+0

奇怪... SQL文档说格式120包括hh:mm:ss - 错误的文档版本? – 2011-03-10 19:00:33

+1

@Dylan Beattie,120是你说的,但是对CHAR(10)的演员丢弃时间。 – bobs 2011-03-10 19:01:53

+1

@Dylan:否。通过为转换数据类型指定'CHAR(10)',我们只能得到完整的'yyyy-mm-dd hh:mi:ss'字符串的前10个字符。 – 2011-03-10 19:02:13

1
SELECT CONVERT(VARCHAR, DATEADD(d,-1,GETDATE()), 110) AS Yesterday 
+0

这给了'mm-dd-yyyy'。 OP要求'yyyy-mm-dd'。 – 2011-03-10 19:17:24

+0

只需使用23作为格式参数,如:SELECT CONVERT(VARCHAR,DATEADD(d,-1,GETDATE()),23)AS昨天 – 2011-03-10 19:26:15

+0

@K Invaov:有趣的是,我从来没有见过23个地方记录过任何地方。 – 2011-03-10 19:29:38