[英]Msg 102, Level 15, State 1, Line 8 Incorrect syntax near '-' , Grant View SQL Server error
[英]SQL ERROR : Msg 102, Level 15, State 1, Line 4 Incorrect syntax near ','
我正在嘗試運行此代碼:
SELECT
FIN AS 'LIN',
CUSIP,
Borrower_Name,
Alias,
DS_Maturity,
Spread,
Facility,
Facility_Size,
Log_date
FROM
[Main].[FacilityInformation]
WHERE
CUSIP IN ('00485GAC2', 'N1603LAD9')
OR (YEAR(DS_Maturity) = (2019, 2024)
AND ((Borrower_Name LIKE 'Acosta Inc , Bright Bidco BV%'
OR Alias LIKE 'Acosta 9/14 (18.61) Non-Extended Cov-Lite, Lumileds 2/18 Cov-Lite%')))
但我得到了這個錯誤:
消息 102,第 15 級,State 1,第 4 行
',' 附近的語法不正確
2019 年至 2024 年間
我試圖修改這段代碼,不管有沒有引號和括號,都沒有奏效。 感謝您的幫助。
Function YEAR
返回int
,所以你需要寫
YEAR(DS_Maturity) IN (2019, 2024)
或者像這樣
YEAR(DS_Maturity) BETWEEN 2019 AND 2024
使用 WhiteSpace 和換行符格式化您的 SQL 可以更輕松地閱讀。 如果你這樣做,你會得到這樣的東西:
SELECT FIN AS LIN,
CUSIP,
Borrower_Name,
Alias,
DS_Maturity,
Spread,
Facility,
Facility_Size,
Log_date
FROM [Main].[FacilityInformation]
WHERE CUSIP = ('00485GAC2', 'N1603LAD9')
OR (YEAR(DS_Maturity) = ('2019','2024')
AND ((Borrower_Name LIKE 'Acosta Inc , Bright Bidco BV%'
OR Alias LIKE 'Acosta 9/14 (18.61) Non-Extended Cov-Lite, Lumileds 2/18 Cov-Lite%')));
運行它,你會得到錯誤:
消息 102,級別 15,State 1,第 12 行“,”附近的語法不正確。
第 12 行是:
OR (YEAR(DS_Maturity) = ('2019','2024')
你現在應該能夠清楚地看到問題所在(應該是IN
而不是=
)。
然而,就我個人而言,我建議不要在WHERE
中使用YEAR
,因為它會使查詢不可搜索。 而是使用正確的日期和 Boolean 邏輯:
OR ((DS_Maturity >= '20190101' AND DS_Maturity < '20200101')
OR ((DS_Maturity >= '20240101' AND DS_Maturity < '20250101')...)
你有=
你應該in
. 但是類型也是錯誤的。 我會建議:
SELECT FIN AS 'LIN', CUSIP, Borrower_Name, Alias,
DS_Maturity, Spread, Facility, Facility_Size,
Log_date
FROM [Main].[FacilityInformation]
WHERE CUSIP IN ('00485GAC2', 'N1603LAD9') or
(YEAR(DS_Maturity) IN (2019, 2024) AND
(Borrower_Name LIKE 'Acosta Inc , Bright Bidco BV%' OR
Alias LIKE 'Acosta 9/14 (18.61) Non-Extended Cov-Lite, Lumileds 2/18 Cov-Lite%'
)
)
如果您打算將其作為一個范圍,則應包括該范圍內的所有值或使用BETWEEN
。
這里:
YEAR(DS_Maturity) = ('2019', '2024')
這不是有效的語法,您可能需要IN
運算符。 此外, YEAR()
返回一個數字,而不是一個字符串
YEAR(DS_Maturity) IN (2019, 2024)
這是您的查詢的新版本。 格式化和縮進更容易理解查詢和發現問題:
SELECT
FIN AS [LIN],
CUSIP,
Borrower_Name,
Alias,
DS_Maturity,
Spread,
Facility,
Facility_Size,
Log_date
FROM [Main].[FacilityInformation]
WHERE
CUSIP IN ('00485GAC2','N1603LAD9')
OR (
YEAR(DS_Maturity) = (2019, 2024)
AND (
Borrower_Name LIKE 'Acosta Inc , Bright Bidco BV%'
OR Alias LIKE 'Acosta 9/14 (18.61) Non-Extended Cov-Lite, Lumileds 2/18 Cov-Lite%'
)
)
您想使用 BETWEEN Sql function 嗎?
SELECT FIN AS 'LIN',
CUSIP,
Borrower_Name,
Alias,
DS_Maturity,
Spread,
Facility,
Facility_Size,
Log_date
FROM [Main].[FacilityInformation]
WHERE CUSIP IN ('00485GAC2', 'N1603LAD9')
OR (YEAR(DS_Maturity) BETWEEN 2019 AND 2024
AND ((Borrower_Name LIKE 'Acosta Inc , Bright Bidco BV%'
OR Alias LIKE 'Acosta 9/14 (18.61) Non-Extended Cov-Lite, Lumileds 2/18 Cov-Lite%')))
將=
替換為IN
,因為您有兩個值,即多個值帶有 =
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.