Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从select语句中引用修改的列名_Mysql_Sql - Fatal编程技术网

Mysql 从select语句中引用修改的列名

Mysql 从select语句中引用修改的列名,mysql,sql,Mysql,Sql,我正在尝试清理和删除数据库中的电子邮件地址。因此,我有以下类似的东西 select rtrim(ltrim(replace(lower(Email), '"', ''))) from Users where Email like '%_@_%.__%' 我的问题是where语句仍然使用未修改的电子邮件字符串,我希望它在应用replace和trims之后使用电子邮件字符串 注意:我在我的实际代码中应用了更多的字符串修改,但我缩短了它,因为它不相关 在WHERE子句中不能使用列别名,除非在HAVI

我正在尝试清理和删除数据库中的电子邮件地址。因此,我有以下类似的东西

select rtrim(ltrim(replace(lower(Email), '"', '')))
from Users
where Email like '%_@_%.__%'
我的问题是where语句仍然使用未修改的电子邮件字符串,我希望它在应用replace和trims之后使用电子邮件字符串


注意:我在我的实际代码中应用了更多的字符串修改,但我缩短了它,因为它不相关

WHERE
子句中不能使用列别名,除非在
HAVING
子句中使用列别名(由于MySQL提供的扩展)。因此,您必须在下面这样的外部查询中执行此操作,否则将在另一个答案中提供替代方法

select NewEmail
from(
select rtrim(ltrim(replace(lower(Email), '"', ''))) as NewEmail
from Users) xx
where NewEmail like '%_@_%.__%'

不一定,看看我的答案。是的,你已经提供了一个替代方案,你正在做相同的操作多次。我相信这不是魔法,不是两次,不是多次,也不是一个沉重或复杂的操作,所以这并不重要。两个查询都需要相同的时间,您刚才说“您必须”,所以我更正了您:)我更喜欢派生表版本,更容易编写代码而不会出错,而且将来其他人更容易/更安全地进行调整。(而且符合ANSI SQL,但现有版本不符合)在我的实际代码中(与上面高度简化的示例相反),我需要进行十几次操作。因此,从干净的代码标准MySQL或MS SQL Server复制逻辑是不可行的?不要给未涉及的产品贴标签。。。(我发现很难相信这两种代码都可以使用。)MySQL,感谢您的关注。删除了服务器标记