使用Replace()进行SELECT

And*_*son 29 sql t-sql sql-server sql-server-2005

我有一个名称和地址表,其中包括一个邮政编码列.我想从邮政编码中删除空格并选择与特定模式匹配的任何空格.我在SQL Server 2005上的T-SQL中尝试这个(简化了一下):

SELECT Replace(Postcode, ' ', '') AS P
FROM Contacts
WHERE P LIKE 'NW101%'
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误;

Msg 207, Level 16, State 1, Line 3
Invalid column name 'P'.
Run Code Online (Sandbox Code Playgroud)

如果我删除WHERE子句,我会得到一个没有空格的邮政编码列表,这就是我想要搜索的内容.我该怎么做呢?我究竟做错了什么?

Ode*_*ded 40

不要直接PWHERE子句中使用别名().

您可以REPLACEWHERE子句中再次使用相同的逻辑:

SELECT Replace(Postcode, ' ', '') AS P
FROM Contacts
WHERE Replace(Postcode, ' ', '') LIKE 'NW101%'
Run Code Online (Sandbox Code Playgroud)

或者使用别名子查询,如Nick的答案中所述.


Nic*_*ver 12

如果你包装查询,你可以引用这种方式,如下所示:

SELECT P
FROM (SELECT Replace(Postcode, ' ', '') AS P
      FROM Contacts) innertable
WHERE P LIKE 'NW101%'
Run Code Online (Sandbox Code Playgroud)

一定要给包装选择一个别名,甚至不用(SQL Server不允许没有一个IIRC)