你好我试图用mySQL做这件事。我尝试使用SELECT IF和CASE来改变标题。每个标题描述在描述前面都有“A”;即使第二个单词以辅音开头。所以我试图查询描述,但编辑带有辅音的那些描述以“An”开头。
CASE
WHEN description LIKE ('A A%') THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description))
WHEN description LIKE ('A E%') THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description))
WHEN description LIKE ('A I%') THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description))
WHEN description LIKE ('A O%') THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description))
WHEN description LIKE ('A U%') THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description))
END;
所以这个特殊代码只是给我错误代码:1064语法。
SELECT IF(description NOT LIKE ('A A%'), NULL, CONCAT('An ', TRIM(LEADING 'A ' FROM description))),
IF(description NOT LIKE ('A E%'), null, CONCAT('An ', TRIM(LEADING 'A ' FROM description))),
IF(description NOT LIKE ('A I%'), NULL, CONCAT('An ', TRIM(LEADING 'A ' FROM description))),
IF(description NOT LIKE ('A O%'), NULL, CONCAT('An ', TRIM(LEADING 'A ' FROM description))),
IF(description NOT LIKE ('A U%'), NULL, CONCAT('An ', TRIM(LEADING 'A ' FROM description)))
FROM film_text;
这个特殊的代码块返回单独的列,但是我试图将所有这些查询到一列。
我的IF块返回的内容:
答案 0 :(得分:1)
请勿在{{1}}表达式中围绕术语使用括号。这可能是您看到的语法错误的原因。相反,尝试使用只有一个条件的LIKE
表达式:
CASE
你也可以在这里使用SELECT CASE WHEN UPPER(description) NOT LIKE 'A A%' AND
UPPER(description) NOT LIKE 'A E%' AND
UPPER(description) NOT LIKE 'A I%' AND
UPPER(description) NOT LIKE 'A O%' AND
UPPER(description) NOT LIKE 'A U%'
THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description)) -- replace A with An
ELSE description -- otherwise use original description
END AS description
FROM yourTable
使用否定字符类REGEXP
来匹配以元音开头的标题而不是:
[^aeiou]
答案 1 :(得分:0)
你的问题实际上是几个问题。
要将多个“列”中的数据作为单个列返回,您可以使用单独的查询并在它们之间使用UNION
。
但这不是你的问题。
最好在WHERE
子句中进行检查(“if”),并在SELECT
中进行一次替换。
这是未经测试的,但可能会让您更接近您想要的内容:
SELECT
CONCAT('An ', TRIM(LEADING 'A ' FROM description)) AS descrip
FROM film_text
WHERE description REGEXP '^A [aeiou]';
REGEXP
执行您尝试在CASE
中执行的检查,并将结果集限制为仅限这些行。
要完成所有操作并返回所有说明,您可以将REGEX
语法与最初尝试过的CASE
结合起来。
SELECT
CASE WHEN description REGEXP '^A [aeiou]'
THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description))
ELSE description
END AS description
FROM film_text;