比较来自世界各地的卖家的域名和 IT 服务价格

选择帮助 Replace//

我有一个名称表和地址,包括邮件索引列。 我想从邮件索引中删除空格,然后选择与特定模板匹配的任何人。 我正在努力做到 /一点简单/ 在 T-SQL 在 SQL Server 2005:


SELECT Replace/Postcode, ' ', ''/ AS P
FROM Contacts
WHERE P LIKE 'NW101%'


但我得到以下错误;


Msg 207, Level 16, State 1, Line 3
Invalid column name 'P'.


如果我删除该报价 WHERE, 我将收到一个没有空格的邮政编码列表。 我该怎么来? 我究竟做错了什么?
已邀请:

郭文康

赞同来自:

不要使用假名 /
P

/ 在句子中
WHERE

直接地。

您可以再次使用相同的逻辑。
REPLACE

在句子中
WHERE

:


SELECT Replace/Postcode, ' ', ''/ AS P
FROM Contacts
WHERE Replace/Postcode, ' ', ''/ LIKE 'NW101%'


或者使用尼克响应中所述的假名子查询。

裸奔

赞同来自:

例如,如果包装请求,可以引用这种方式:


SELECT P
FROM /SELECT Replace/Postcode, ' ', ''/ AS P
FROM Contacts/ innertable
WHERE P LIKE 'NW101%'


一定要包裹 select 假名,甚至未使用 /SQL Server 没有一个人不允许它 IIRC/

石油百科

赞同来自:

如果您希望至少有一些希望使用索引,请以连贯的方式存储数据 /带遥控空间/. 只需删除空格,或添加已保存的计算列,那么您可以简单地从此列中选择,并且每次运行请求时都不会通过删除开销来添加所有空格。

添加计算列 PERSISTED:


ALTER TABLE Contacts ADD PostcodeSpaceFree AS Replace/Postcode, ' ', ''/ PERSISTED 
go
CREATE NONCLUSTERED INDEX IX_Contacts_PostcodeSpaceFree
ON Contacts /PostcodeSpaceFree/ --INCLUDE /covered columns here!!/
go


要修复列,删除空格,请使用:


UPDATE Contacts
SET Postcode=Replace/Postcode, ' ', ''/


现在你可以像这样搜索:要么 select 可以使用索引:


--search the PERSISTED computed column
SELECT
PostcodeSpaceFree
FROM Contacts
WHERE PostcodeSpaceFree LIKE 'NW101%'


或者


--search the fixed /spaces removed column/
SELECT
Postcode
FROM Contacts
WHERE PostcodeLIKE 'NW101%'

冰洋

赞同来自:

你创建一个假名
P

, 后来在句子中
where

您使用的是它创造了一个问题。 不使用
P


where

, 相反:


SELECT Replace/Postcode, ' ', ''/ AS P FROM Contacts
WHERE Postcode LIKE 'NW101%'

知食

赞同来自:

您必须在您想要使用它的地方重复您的表达式:


SELECT Replace/Postcode, ' ', ''/ AS P
FROM Contacts
WHERE Replace/Postcode, ' ', ''/ LIKE 'NW101%'


或者你可以使它子查询


select P
from /
SELECT Replace/Postcode, ' ', ''/ AS P
FROM Contacts
/ t
WHERE P LIKE 'NW101%'

帅驴

赞同来自:

扩大
https://coderoad.ru/2652095/
, 您的概念模型需要在此处进行小调整。 列名的假名 /
AS

列表中的提案
SELECT

/ 处理时会很晚
SELECT

, 因此,假名不可用
WHERE

提案。 事实上,唯一的事情发生了平滑列后, - 这是一个排序,所以 /通过引用文件
SELECT

/:


column_alias

可以以条款规定的方式使用。 但是,它不能在句子中使用
WHERE

,
GROUP BY

或者
HAVING

.

如果您在列表中有一个令人困惑的表达式
SELECT

, 你可以担心它是什么 "将被评为两次", 当它出现在列表中时
SELECT

和 /说/ 提供
WHERE

- 但是,请求机制足以理解正在发生的事情。 如果要避免在您的请求中出现两次表达,则可以执行类似的事情


SELECT c1, c2, c3, expr1
FROM
/ SELECT c1, c2, c3, some_complicated_expression AS expr1 / inner
WHERE expr1 = condition


这避免了外观
some_complicated_expression

两次。

石油百科

赞同来自:

SELECT *
FROM Contacts
WHERE ContactId IN
/SELECT a.ContactID
FROM
/SELECT ContactId, Replace/Postcode, ' ', ''/ AS P
FROM Contacts
WHERE Postcode LIKE '%N%W%1%0%1%'/ a
WHERE a.P LIKE 'NW101%'/

二哥

赞同来自:

它会有效:


SELECT Replace/Postcode, ' ', ''/ AS P
FROM Contacts
WHERE Replace/Postcode, ' ', ''/ LIKE 'NW101%'

要回复问题请先登录注册