我有:
SELECT KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' +
RTRIM(NSG_TOWN.TOWN_NAME) + ' ' + RTRIM(NSG_AUTHORITY.AUTHORITY_NAME)
这使我看起来像一列,但不是:
我想拥有它,因此我的代码仅从KEYWORDS中选择与用户键入的内容相匹配的行。通常,如果KEYWORDS是一列,我会写:
SELECT .... WHERE KEYWORDS = '%whateverTheUserIsTyping%'
但是我不能,因为关键字不是真正的列,它告诉我它不存在。
我该如何解决?谢谢
答案 0 :(得分:1)
您可以使用具有别名(此处为Q
)的派生表,并通过过滤WHERE
子句从中获取结果:
SELECT Q.KEYWORDS FROM (
SELECT KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' +
RTRIM(NSG_TOWN.TOWN_NAME) + ' ' + RTRIM(NSG_AUTHORITY.AUTHORITY_NAME)
) AS Q
WHERE Q.KEYWORDS LIKE '%whateverTheUserIsTyping%'
因为您不能如上所述在WHERE
子句中使用列别名。另外,您可以使用KEYWORDS = '%whateverTheUserIsTyping%'
运算符代替LIKE
。
答案 1 :(得分:1)
在评估KEYWORDS
子句时,SQL引擎看不到列别名WHERE
。不过,您可以只重复CAST
语句。
SELECT
KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' +
RTRIM(NSG_TOWN.TOWN_NAME) + ' ' + RTRIM(NSG_AUTHORITY.AUTHORITY_NAME)
FROM yourTable
WHERE
CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' +
RTRIM(NSG_TOWN.TOWN_NAME) + ' ' + RTRIM(NSG_AUTHORITY.AUTHORITY_NAME)
LIKE '%whateverTheUserIsTyping%'