【问题标题】:SQL-Date-Question: How to get Yesterdays date in the following formatteSQL-日期问题:如何以下列格式获取昨天的日期
【发布时间】:2011-03-10 18:49:46
【问题描述】:

这是我目前所拥有的

declare @Today smalldatetime
Set @Today = GETDATE()
select @Today

产量

2011-03-10 13:46:00

我需要的是:

2011-03-09

【问题讨论】:

    标签: c# sql sql-server-2008 date


    【解决方案1】:

    试试这个:

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

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

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

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

    并且根据您的示例,REPLACE 将用连字符替换预定义格式中的句点。

    【讨论】:

    【解决方案2】:

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

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

    对于所有版本:

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

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

    【讨论】:

    • 奇怪... SQL 文档说格式 120 包括 hh:mm:ss - 错误的文档版本?
    • @Dylan Beattie,你说的是 120,但转换为 CHAR(10) 会丢弃时间。
    • @Dylan: 不会。通过为转换数据类型指定CHAR(10),我们只能获得完整yyyy-mm-dd hh:mi:ss 字符串的前10 个字符。
    【解决方案3】:
    
    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

    【讨论】:

    • 不知何故错过了“昨天”这个词,因为我只是在阅读您的示例代码。我在代码中添加了 dateadd 函数。
    • 不,这是我的错,我没有在描述中指定...我很惭愧
    【解决方案4】:
    SELECT CONVERT(VARCHAR, DATEADD(d,-1,GETDATE()), 110) AS Yesterday
    

    【讨论】:

    • 这给了mm-dd-yyyy。 OP 要求yyyy-mm-dd
    • 只使用 23 作为格式化参数,例如:SELECT CONVERT(VARCHAR, DATEADD(d,-1,GETDATE()), 23) AS Yesterday
    • @K Invaov:有趣的是,我以前从未在任何地方看到过 23 个文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多