在CASE语句中使用“ LIKE”

时间:2019-09-16 20:15:15

标签: sql case sql-like

我正在尝试根据现有字段(其中某些条目包含不同的特殊字符)来生成新字段。 (即*,')特殊字符位于字符串的末尾,即第二或第三位置。

我对SQL是新手,但对数据却不是新手。我正在使用CASE WHEN语句。我在CASE语句中尝试了几种方法和其他一些命令。

我想要的是:

SELECT *
    CASE WHEN grde_code_mid LIKE '[*]' THEN 'Remedial'
         WHEN grde_code_mid LIKE '[']' THEN 'Continuing'
         ELSE NULL
    END AS class_type
FROM grde_tble

我一直收到相同的错误:“未在预期的位置找到FROM关键字”。我希望所有3个退货都在新字段中。

3 个答案:

答案 0 :(得分:0)

如果您要查找'字符,则应将其转义。

更改

WHEN grde_code_mid LIKE '[']' THEN 'Continuing'

作者

WHEN grde_code_mid LIKE '['']' THEN 'Continuing'

看看这个问题:How do I escape a single quote in SQL Server?

答案 1 :(得分:0)

您的查询存在几个问题:

  • 您在SELECT*表达式之间的CASE子句中缺少逗号(这引起了您当前遇到的错误)
  • 仅在SQL-Server中支持括号符号;如果您想以可移植的方式匹配以*结尾的字符串,则需要表达式... LIKE '%*',而不是LIKE '[*]'
  • 嵌入在字符串中的单引号需要转义
  • SELECT *, other_field FROM ...并非在所有RDBMS上都受支持(并且jarhl评论说,实际上不是标准的ANSI SQL表示法);您通常需要在*前面加上表名或别名

考虑:

SELECT 
    g.*,
    CASE 
        WHEN grde_code_mid LIKE '%*' THEN 'Remedial'
        WHEN grde_code_mid LIKE '%''' THEN 'Continuing'
        ELSE NULL
    END AS class_type
FROM grde_tble g

答案 2 :(得分:0)

谢谢大家。我仍然掌握该语言和适当术语。我正在使用Oracle DB。另外,是的,我确实需要在select语句(SELECT 表名。*)中引用该表。找到了解决方法:

当regexp_like(grde_code_mid,'[*]')然后是'补救'的情况      当regexp_like(grde_code_mid,'['']')然后'继续'      ELSE NULL END AS special_class