2017-05-12 161 views
2

試圖天增加一個日期,然後格式化日期,但得到這個錯誤添加天日期,然後格式化日期錯誤

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

回答

1

我認爲錯誤是非常明顯的。只需嵌套功能。無法將結果集保存爲標量變量:

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

瞧!根本不需要變量。

請注意,我還引入了表別名,以便查詢更易於編寫和讀取。

+0

好的回答&** Voila **很棒;) – Sami

0

對於en-GB(dd/mm/yyyy)格式,您還可以使用款式103convert()

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; 

這提供了相同的結果由戈登·利諾夫答案,但format()速度可能很慢,採取看這裏:format() is nice and all, but… - Aaron Bertrand


此外,使用字符串文字的其他(例如 '*InvoiceDate')已棄用。建議將含有特殊字符的別名替換爲方括號(例如 [*InvoiceDate])。