选择来自 XYZ 的电子邮件,其中电子邮件=“%gmail.com”


select email from xyz where email="%gmail.com"

有没有办法从数据库中选择包含某些数据的条目?我在数据库中有很多电子邮件地址,但我只想从一个域中进行选择。甚至可能吗?

当然 - 只需使用 LIKE 运算符。

SELECT email FROM Persons
WHERE email LIKE '%gmail.com'

不建议进行通配符搜索。
这是因为 mysql 无法使用索引来固定选择查询。
特别是你提到你在数据库中有很多电子邮件。

或者,您可以使用附加字段作为仅存储主机名hostname
当然,还要为它建立一个索引。

如果您需要搜索带有gmail.com的电子邮件,
然后你可以做直接的字符串比较

SELECT email FROM Persons
WHERE hostname='gmail.com';

由于直字符串比较是 mysql 索引的良好配合,因此您的查询将得到优化。

正如ajreal指出的那样,在一般情况下,MySQL不能使用索引来优化LIKE查询。但是,在尾随通配符的特定情况下,唯一的%位于模式的最末端(实际上是"开头为"查询),优化器可以使用索引很好地加快查询速度。

因此,如果要添加反向存储电子邮件地址的其他索引列,则可以有效地查询

SELECT email FROM xyz WHERE reverse_email LIKE 'moc.liamg@%`

查找所有Gmail地址,或LIKE 'ku.%英国域下的所有地址等。 您可以让数据库使用触发器使此列保持最新,因此它不会影响您现有的更新代码

CREATE TRIGGER emailinsert BEFORE INSERT ON xyz
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email);
CREATE TRIGGER emailupdate BEFORE UPDATE ON xyz
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email);
你需要

使用LIKE MYSQL CLAUSE

SELECT * FROM email_table WHERE email LIKE "%gmail.com"