当使用“ SELECT varname = something + something etc.”时,我不能再执行“ WHERE varname = ...”

时间:2019-04-10 13:23:56

标签: sql casting command

我有:

 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)

这使我看起来像一列,但不是:

enter image description here

我想拥有它,因此我的代码仅从KEYWORDS中选择与用户键入的内容相匹配的行。通常,如果KEYWORDS是一列,我会写:

SELECT .... WHERE KEYWORDS = '%whateverTheUserIsTyping%'

但是我不能,因为关键字不是真正的列,它告诉我它不存在。

我该如何解决?谢谢

2 个答案:

答案 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%'