【问题标题】:Add days to Date then Format Date Error将天数添加到日期然后格式化日期错误
【发布时间】:2017-05-13 20:30:32
【问题描述】:

尝试将日期添加到日期然后格式化日期但收到此错误

消息 512,级别 16,状态 1,行 2 子查询返回超过 1 个 价值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

这是查询

DECLARE @date DATETIME
SET @date = (SELECT DATEADD(DAY,30,dbo.EJTable.Receipt_Date_Time) FROM dbo.EJTable)
SELECT FORMAT(@date, 'd', 'en-GB') as '*InvoiceDate'
FROM dbo.EJTable

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我认为错误很明显。只需嵌套函数。您不能将结果集保存到标量变量:

    SELECT FORMAT(DATEADD(DAY, 30, t.Receipt_Date_Time) 'd', 'en-GB') as '*InvoiceDate'
    FROM dbo.EJTable t;
    

    瞧!根本不需要变量。

    请注意,我还引入了表别名,以便查询更易于编写和阅读。

    【讨论】:

    • 好答案 & 很棒 ;)
    【解决方案2】:

    您还可以将样式103convert() 一起用于en-GB (dd/mm/yyyy) 格式。

    select convert(char(10),dateadd(day,30,getdate()),103)
    

    返回:12/06/2017

    对于您的代码,如下所示:

    select convert(char(10),dateadd(day, 30, Receipt_Date_Time),103) as [*InvoiceDate]
    from dbo.EJTable;
    

    这提供了与 Gordon Linoff 的答案相同的结果,但 format() 可能会更慢,请看这里:format() is nice and all, but… - Aaron Bertrand


    此外,不推荐使用字符串文字作为别名(例如'*InvoiceDate')。建议将包含特殊字符的别名用方括号括起来(例如[*InvoiceDate])。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2021-04-26
      • 2018-10-20
      • 2010-10-08
      • 2023-03-06
      • 2023-03-09
      相关资源
      最近更新 更多