我正在尝试根据现有字段(其中某些条目包含不同的特殊字符)来生成新字段。 (即*,')特殊字符位于字符串的末尾,即第二或第三位置。
我对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个退货都在新字段中。
答案 0 :(得分:0)
如果您要查找'字符,则应将其转义。
更改
WHEN grde_code_mid LIKE '[']' THEN 'Continuing'
作者
WHEN grde_code_mid LIKE '['']' THEN 'Continuing'
答案 1 :(得分:0)
您的查询存在几个问题:
SELECT
和*
表达式之间的CASE
子句中缺少逗号(这引起了您当前遇到的错误)*
结尾的字符串,则需要表达式... 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