我在一个网站上练习,他们要求我只用一个WHERE条件显示名字中带有'e'或'E'的玩家列表。
我的查询显示了与预期相同的输出,但该网站却说“我做了一些不正确或结果不完整的事情”。
我的WHERE语句是否算作一个条件?有没有办法在LIKE之后不区分大小写?
SELECT DISTINCT s.spelersnr, voorletters || ' ' || naam AS spelersnaam
FROM spelers s INNER JOIN wedstrijden w
ON s.spelersnr = w.spelersnr
WHERE LOWER(naam) LIKE '%e%'
ORDER BY s.spelersnr ASC
假设您的数据库支持LOWER
函数,那么您当前的WHERE
子句似乎已经是一个条件:
WHERE LOWER(naam) LIKE '%e%'
在Postgres中,你也可以用SIMILAR TO
写这个:
WHERE naam SIMILAR TO '%(e|E)%'
或者,您可以使用POSIX正则表达式:
WHERE naam ~* '.*e.*'
正如你所提到的那样是postgres db,使用类似或类似的帮助。详细解释如下链接https://dba.stackexchange.com/questions/10694/pattern-matching-with-like-similar-to-or-regular-expressions-in-postgresql
这将工作:
SELECT DISTINCT s.spelersnr, voorletters || ' ' || naam AS spelersnaam
FROM spelers s INNER JOIN wedstrijden w
ON s.spelersnr = w.spelersnr
WHERE REGEXP_LIKE (naam, '(.)*e(.)*', 'i')
ORDER BY s.spelersnr ASC