我从以下SQL查询中得到')'附近的错误语法错误:
SELECT
"GLPOST"."ACCTID",
"GLPOST"."FISCALYR",
"GLPOST"."FISCALPERD",
"GLPOST"."SRCELEDGER",
"GLPOST"."JRNLDATE",
"GLPOST"."BATCHNBR",
"GLPOST"."ENTRYNBR",
"GLPOST"."JNLDTLDESC",
"GLPOST"."JNLDTLREF",
"GLPOST"."TRANSAMT",
"APIBC"."POSTSEQNBR",
"APIBC"."CNTBTCH"
FROM ("MHLDAT"."dbo"."GLPOST" "GLPOST"
INNER JOIN "MHLDAT"."dbo"."GLJEH" "GLJEH"
ON (("GLPOST"."DRILSRCTY"="GLJEH"."DRILSRCTY")
AND ("GLPOST"."DRILLDWNLK"="GLJEH"."DRILLDWNLK")
AND "GLPOST"."DRILAPP"="GLJEH"."DRILAPP")))
INNER JOIN "MHLDAT"."dbo"."APIBC" "APIBC"
ON "APIBC"."POSTSEQNBR" = (CAST ("SUBSTRING" (CAST ("GLPOST"."DRILLDWNLK" AS "CHAR"(18)),3,CAST ("LEFT" (CAST ("GLPOST"."DRILLDWNLK" AS "CHAR"(18)),1) AS "INT" )) AS "INT" ))
WHERE
"GLPOST"."SRCELEDGER"=N'AP' AND "GLPOST"."FISCALYR"=N'2021' AND "GLPOST"."FISCALPERD"=N'01' AND "GLJEH"."ERRBATCH"=0
有任何解决的建议吗?
您可能会丢失所有双引号:
SELECT
GLPOST.ACCTID,
GLPOST.FISCALYR,
GLPOST.FISCALPERD,
GLPOST.SRCELEDGER,
GLPOST.JRNLDATE,
GLPOST.BATCHNBR,
GLPOST.ENTRYNBR,
GLPOST.JNLDTLDESC,
GLPOST.JNLDTLREF,
GLPOST.TRANSAMT,
APIBC.POSTSEQNBR,
APIBC.CNTBTCH
FROM MHLDAT.dbo.GLPOST GLPOST
INNER JOIN MHLDAT.dbo.GLJEH GLJEH
ON ((GLPOST.DRILSRCTY=GLJEH.DRILSRCTY)
AND (GLPOST.DRILLDWNLK=GLJEH.DRILLDWNLK)
AND GLPOST.DRILAPP=GLJEH.DRILAPP))
INNER JOIN MHLDAT.dbo.APIBC APIBC
INNER JOIN MHLDAT.dbo.APIBC APIBC
ON APIBC.POSTSEQNBR =
CAST
(SUBSTRING(CAST(GLPOST.DRILLDWNLK AS CHAR(18)),3,CAST(LEFT(CAST(GLPOST.DRILLDWNLK AS CHAR(18)),1) AS INT ))
AS INT )
WHERE
GLPOST.SRCELEDGER = 'AP' AND GLPOST.FISCALYR= '2021' AND GLPOST.FISCALPERD= '01' AND GLJEH.ERRBATCH = 0
SELECT
GLPOST.ACCTID,
GLPOST.FISCALYR,
GLPOST.FISCALPERD,
GLPOST.SRCELEDGER,
GLPOST.JRNLDATE,
GLPOST.BATCHNBR,
GLPOST.ENTRYNBR,
GLPOST.JNLDTLDESC,
GLPOST.JNLDTLREF,
GLPOST.TRANSAMT,
APIBC.POSTSEQNBR,
APIBC.CNTBTCH
FROM MHLDAT.dbo.GLPOST
INNER JOIN MHLDAT.dbo.GLJEH
ON GLPOST.DRILSRCTY=GLJEH.DRILSRCTY
AND GLPOST.DRILLDWNLK=GLJEH.DRILLDWNLK
AND GLPOST.DRILAPP=GLJEH.DRILAPP
INNER JOIN MHLDAT.dbo.APIBC
ON APIBC.POSTSEQNBR = CAST(SUBSTRING(CAST(GLPOST.DRILLDWNLK
AS CHAR(18)),
3,
CAST(LEFT(CAST(GLPOST.DRILLDWNLK
AS CHAR(18)),
1)
AS INT)
)
AS INT)
WHERE
GLPOST.SRCELEDGER = N'AP'
AND GLPOST.FISCALYR = N'2021'
AND GLPOST.FISCALPERD = N'01'
AND GLJEH.ERRBATCH = 0
您使用了很多不必要的括号并用双引号将其删除(特别是在函数SUBSTRING和LEFT的名称上)。删除别名(因为使用与表相同的名称,所以它们是不必要的)。
我已经将您的查询对齐,因此您可以直观地看到每个子表达式的开始和结束位置。