添加天数到日期然后格式化日期错误

时间:2017-05-12 21:03:02

标签: sql sql-server

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

  

消息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

2 个答案:

答案 0 :(得分:1)

我认为错误非常清楚。只是嵌套功能。您无法将结果集保存为标量变量:

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

瞧!根本不需要变量。

请注意,我还引入了一个表别名,因此查询更容易编写和阅读。

答案 1 :(得分:0)

您还可以将样式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])。