SQL在Where语句中使用别名

Mel*_*sus 33 sql

我怎么能在where语句中使用别名.

示例:

SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
WHERE Col1 = 'MySearch'
Run Code Online (Sandbox Code Playgroud)

我使用MSSQL 2005

arn*_*lem 53

您可以使用"having"而不是"where".

SELECT
    SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM
    MyTable
HAVING
    Col1 = 'MySearch'
Run Code Online (Sandbox Code Playgroud)

在执行查询后执行"where".小心在合适的条件下使用它,以避免性能问题.

  • 优雅但不起作用:/(MSSQL 2008 R2) (8认同)
  • 这是最容易实现和最通用的解决方案.我不知道为什么它不会被投票. (4认同)
  • HAVING仅适用于MS SQL Server中的聚合函数.测试于2012年和2016年. (3认同)
  • 这是正确的答案。 (2认同)

Dav*_*unt 20

不可能,但您可以执行以下操作:

SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
WHERE SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'
Run Code Online (Sandbox Code Playgroud)

不需要子查询或黑客攻击

  • 但是如果创建col1的功能要求很高的话.然后你运行两次?(在这种情况下,子串4次) (17认同)
  • 而且,你正在复制代码.select子句中的语句与where子句中的语句相同,后者使维护的工作量增加了一倍. (7认同)

cgp*_*cgp 19

使用子查询:

SELECT * 
FROM 
  (SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 FROM MyTable)
WHERE Col1 = 'MySearch'
Run Code Online (Sandbox Code Playgroud)


Fre*_*els 8

你可以这样做:

SELECT Col1
FROM ( SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 ) AS x
WHERE Col1 = 'MySearch'
Run Code Online (Sandbox Code Playgroud)


Dav*_*sta 5

SELECT * FROM (
  SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
  FROM MyTable
)
WHERE Col1 = 'MySearch'
Run Code Online (Sandbox Code Playgroud)

(我知道这在Oracle中有效,我相信它是标准的SQL,可以在MSSQL中使用.)