你好,我正在尝试用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 yourTable发布于 2017-01-18 10:28:33
你的问题实际上是几个问题。
要从作为单个列返回的多个“列”中获取数据,可以使用单独的查询,并在它们之间使用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;https://stackoverflow.com/questions/41710316
复制相似问题