无法查明 LIKE 关键字附近的错误
Can't pinpoint error near the LIKE keyword
我 运行 在我的 LIKE 语句附近出现 sql 查询错误。我是否在 CASE 的 WHEN 子句中错误地格式化了 LIKE 子句?这是代码。
SELECT
substring (Cases.FileNumber,4,6) AS [FileNumber]
,Charge.ChargeCode
,Cases.BookedLastName
,Cases.BookedFirstName
,Cases.ArrestDate
,Cases.BookedDOB
,Cases.BookedAge
,Charge.OffenseToDate
,Cases.BookedRace
,Cases.BookedSex
,Charge.OffenseStreetAddress1
,Charge.OffenseCity
,Charge.OffenseState
,Charge.OffenseZipCode
,Charge.ChargeDescription
,(SELECT CASE
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
FROM tblCsCharge AS charge1
INNER JOIN tblCsCases AS cases1
ON charge1.FileNumber = cases1.FileNumber
WHERE
charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedDOB = Cases.BookedDOB
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
FROM
tblCsCases AS Cases
INNER JOIN tblCsCharge AS Charge
ON Cases.FileNumber = Charge.FileNumber
WHERE Cases.IssuedDate >= 01/01/2017
AND
Cases.IssuedDate <= @EndDate
AND
Charge.ChargeCode IN (N'579.015-001Y201735')
AND
Cases.BookedLastName NOT IN (N'Bogus')
ORDER By
Cases.BookedLastName
这是一个更大查询中的一个子查询,该查询侧重于构建一个列,该列将根据我们数据库中的大文本字段简单地输出海洛因或非海洛因。
编辑:
尽管应该使代码编译的更改,现在出现以下错误:
列名称无效 'BookedLastName'。
列名称无效 'BookedLastName'。
列名称无效 'BookedDOB'。
无法绑定多部分标识符 "cases2.ChargeCode"。
正确的语法是:
CASE
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
在此语法中,不要将字段名称放在 CASE
之后。
这似乎是问题..
AND cases2.ChargeCode IN (N'579.015-001Y201735') AS HeroinYN
由于这是子查询的一部分,您需要另一个括号
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
还有
当您使用相等运算符时,您不能将列名放在 CASE
语句之后。
这是可以接受的
select
case columnName
when 'X' then 1
when 'Y' then 0
end
这不是
select
case columnName
when = 'X' then 1
when columnName like '%Y%' then 0
end
更正脚本
,(SELECT CASE
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
FROM tblCsCharge AS charge1
INNER JOIN tblCsCases AS cases1
ON charge1.FileNumber = cases1.FileNumber
WHERE
charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedDOB = Cases.BookedDOB
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
您的代码中有两个错误,虽然不是在同一个答案中,但都已指出。
- 你的案例陈述应该没有括号中的列名 - 我在下面的代码副本中注释掉了)
- 您在查询末尾缺少右括号,就在别名之前 - 我在下面添加了它。
.
,(SELECT CASE--(charge1.ChargeDescription)
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
FROM tblCsCharge AS charge1
INNER JOIN tblCsCases AS cases1
ON charge1.FileNumber = cases1.FileNumber
WHERE
charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedDOB = Cases.BookedDOB
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
我 运行 在我的 LIKE 语句附近出现 sql 查询错误。我是否在 CASE 的 WHEN 子句中错误地格式化了 LIKE 子句?这是代码。
SELECT
substring (Cases.FileNumber,4,6) AS [FileNumber]
,Charge.ChargeCode
,Cases.BookedLastName
,Cases.BookedFirstName
,Cases.ArrestDate
,Cases.BookedDOB
,Cases.BookedAge
,Charge.OffenseToDate
,Cases.BookedRace
,Cases.BookedSex
,Charge.OffenseStreetAddress1
,Charge.OffenseCity
,Charge.OffenseState
,Charge.OffenseZipCode
,Charge.ChargeDescription
,(SELECT CASE
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
FROM tblCsCharge AS charge1
INNER JOIN tblCsCases AS cases1
ON charge1.FileNumber = cases1.FileNumber
WHERE
charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedDOB = Cases.BookedDOB
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
FROM
tblCsCases AS Cases
INNER JOIN tblCsCharge AS Charge
ON Cases.FileNumber = Charge.FileNumber
WHERE Cases.IssuedDate >= 01/01/2017
AND
Cases.IssuedDate <= @EndDate
AND
Charge.ChargeCode IN (N'579.015-001Y201735')
AND
Cases.BookedLastName NOT IN (N'Bogus')
ORDER By
Cases.BookedLastName
这是一个更大查询中的一个子查询,该查询侧重于构建一个列,该列将根据我们数据库中的大文本字段简单地输出海洛因或非海洛因。
编辑:
尽管应该使代码编译的更改,现在出现以下错误: 列名称无效 'BookedLastName'。 列名称无效 'BookedLastName'。 列名称无效 'BookedDOB'。 无法绑定多部分标识符 "cases2.ChargeCode"。
正确的语法是:
CASE
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
在此语法中,不要将字段名称放在 CASE
之后。
这似乎是问题..
AND cases2.ChargeCode IN (N'579.015-001Y201735') AS HeroinYN
由于这是子查询的一部分,您需要另一个括号
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
还有
当您使用相等运算符时,您不能将列名放在 CASE
语句之后。
这是可以接受的
select
case columnName
when 'X' then 1
when 'Y' then 0
end
这不是
select
case columnName
when = 'X' then 1
when columnName like '%Y%' then 0
end
更正脚本
,(SELECT CASE
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
FROM tblCsCharge AS charge1
INNER JOIN tblCsCases AS cases1
ON charge1.FileNumber = cases1.FileNumber
WHERE
charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedDOB = Cases.BookedDOB
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN
您的代码中有两个错误,虽然不是在同一个答案中,但都已指出。
- 你的案例陈述应该没有括号中的列名 - 我在下面的代码副本中注释掉了)
- 您在查询末尾缺少右括号,就在别名之前 - 我在下面添加了它。
.
,(SELECT CASE--(charge1.ChargeDescription)
WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
ELSE 'Not Heroin'
END
FROM tblCsCharge AS charge1
INNER JOIN tblCsCases AS cases1
ON charge1.FileNumber = cases1.FileNumber
WHERE
charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedLastName = cases1.BookedLastName
AND charge1.BookedDOB = Cases.BookedDOB
AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN