你好,我正在尝试用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代码块返回了什么:

发布于 2017-01-18 10:28:13
不要在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]一起使用,以匹配不以元音开头的标题:
SELECT CASE WHEN description REGEXP '^A [^aeiou]'
THEN CONCAT('An ', TRIM(LEADING 'A ' FROM description))
ELSE description
END AS description
FROM yourTablehttps://stackoverflow.com/questions/41710316
复制相似问题