2016-02-18 16 views
-1

我有這樣的錯誤:附近有語法錯誤CAST「,預期 'AS'

Incorrect syntax near 'CAST', expected 'AS'.

SELECT IdAnnoucement, AnnoucementNAme, AnnoucmentDetails, DateOn, DateOff, 
active, appID FROM tblAnnoucemnt WHERE DateOn >= 
CAST(convert(nvarchar,CAST(GETDATE() as date))+'00:00:01') as datetime)) AND 
DateOff <= CAST(convert(nvarchar,CAST(GETDATE() AS date))+'23:59:01') as 
datetime)) ORDER BY IdAnnoucement DESC 
+1

使你的代碼是可讀的,請看一看如何格式化你的問題在本指南:http://meta.stackexchange.com/a/22189 – mech

+2

計數的開閉'('和') '。另外,爲什麼你將日期/時間轉換爲Unicode?和[沒有指定長度](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx)?基本上使用'BETWEEN'而不是> =今天和<明天(參見[this](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the- devil-have-in-common.aspx)和[this](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries的.aspx))? –

+0

最後,爲了好的措施,你的陳述是[缺少終止分號](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/09/03/ladies-and-gentlemen-start-your-半colons.aspx)。 –

回答

2

你不應該只是在括號注意,但也在太空bofe ' 00:00...'。這是爲了準備要正確轉換的日期所必需的。

SELECT idannoucement, 
     annoucementname, 
     annoucmentdetails, 
     dateon, 
     dateoff, 
     active, 
     appid 
FROM tblannoucemnt 
WHERE dateon >= CAST(CONVERT(NVARCHAR, CAST(getdate() AS DATE)) + ' 00:00:01' AS DATETIME) 
AND 
dateoff <= CAST(CONVERT(NVARCHAR, CAST(getdate() AS DATE)) + ' 23:59:01' AS DATETIME) ORDER BY idannoucement DESC 
+0

謝謝你的工作:) –

2

檢查括號

SELECT IdAnnoucement , 
     AnnoucementNAme , 
     AnnoucmentDetails , 
     DateOn , 
     DateOff , 
     active , 
     appID 
FROM tblAnnoucemnt 
WHERE DateOn >= CAST(CONVERT(NVARCHAR, CAST(GETDATE() AS DATE)) + '00:00:01' AS DATETIME) 
     AND DateOff <= CAST(CONVERT(NVARCHAR, CAST(GETDATE() AS DATE)) 
     + '23:59:01' AS DATETIME) 
ORDER BY IdAnnoucement DESC 
+1

啊,可讀性好,很好 – Scriven