当使用 "SELECT varname = something + something etc. I cannot then do "WHERE varname = ..."
when using "SELECT varname = something + something etc. I cannot then do "WHERE varname = ..."
我有:
SELECT KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(SD) + ' ' + RTRIM(NL.LOCALITY_NAME) + ' ' +
RTRIM(NT.TOWN_NAME) + ' ' + RTRIM(NA.AUTHORITY_NAME)
这让我看起来像一个专栏,但不是:
我想要它,所以我的代码只从关键字中选择与用户输入的内容匹配的行。通常,如果 KEYWORDS 是一列,我会写:
SELECT .... WHERE KEYWORDS = '%whateverTheUserIsTyping%'
但我不能,因为关键字不是一个真正的列,它告诉我它不存在。
我该如何解决这个问题?谢谢
您可以使用带别名的派生 table(此处为 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
子句中使用列别名。您也可以使用 LIKE
运算符代替 KEYWORDS = '%whateverTheUserIsTyping%'
。
列别名 KEYWORDS
在计算 WHERE
子句时对 SQL 引擎不可见。不过,您可以重复您的 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%'
我有:
SELECT KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(SD) + ' ' + RTRIM(NL.LOCALITY_NAME) + ' ' +
RTRIM(NT.TOWN_NAME) + ' ' + RTRIM(NA.AUTHORITY_NAME)
这让我看起来像一个专栏,但不是:
我想要它,所以我的代码只从关键字中选择与用户输入的内容匹配的行。通常,如果 KEYWORDS 是一列,我会写:
SELECT .... WHERE KEYWORDS = '%whateverTheUserIsTyping%'
但我不能,因为关键字不是一个真正的列,它告诉我它不存在。
我该如何解决这个问题?谢谢
您可以使用带别名的派生 table(此处为 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
子句中使用列别名。您也可以使用 LIKE
运算符代替 KEYWORDS = '%whateverTheUserIsTyping%'
。
列别名 KEYWORDS
在计算 WHERE
子句时对 SQL 引擎不可见。不过,您可以重复您的 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%'