首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在LIKE关键字附近找不到错误

在LIKE关键字附近找不到错误
EN

Stack Overflow用户
提问于 2017-08-17 16:27:02
回答 3查看 80关注 0票数 2

我在LIKE语句附近的sql查询中遇到了一个错误。我是否在大小写的WHEN子句中错误地格式化了LIKE子句?这是密码。

代码语言:javascript
复制
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“无法绑定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-17 16:35:34

您的代码中有两个错误,这两个错误都指出了,但答案不同。

  1. 您的case语句应该没有括号中的列名--我在下面的代码副本中对其进行了注释)
  2. 在查询结束时,就在别名之前缺少一个结束括号--我在下面添加了它。

代码语言:javascript
复制
,(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
票数 2
EN

Stack Overflow用户

发布于 2017-08-17 16:29:44

这似乎就是问题所在..。

AND cases2.ChargeCode IN (N'579.015-001Y201735') AS HeroinYN

因为这是子查询的一部分,所以需要另一个括号

AND cases2.ChargeCode IN (N'579.015-001Y201735')) AS HeroinYN

也是

在使用相等运算符时,不能将列名放在CASE语句之后。

这是可以接受的

代码语言:javascript
复制
select
   case columnName
      when 'X' then 1
      when 'Y' then 0
   end

这不是

代码语言:javascript
复制
select
   case columnName
      when = 'X' then 1
      when columnName like '%Y%' then 0
   end

修正脚本

代码语言:javascript
复制
,(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
票数 1
EN

Stack Overflow用户

发布于 2017-08-17 16:29:44

正确的语法是:

代码语言:javascript
复制
CASE 
    WHEN charge1.ChargeDescription LIKE N'%heroin%' THEN 'Heroin'
    ELSE 'Not Heroin'
END

不要在这个语法中将字段名放在CASE后面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45740478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档