簡體   English   中英

SQL 錯誤:消息 102,級別 15,State 1,第 4 行“,”附近的語法不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM