是否可以使用带位置的WHERE来选择sqlserver数据?

时间:2016-02-02 13:46:44

标签: sql sql-server

通常我们使用一列来过滤sql句子

SELECT col_id, col_name FROM dataTable WHERE col__id>5

可以使用ORDER的职位:ORDER BY 1 DESC

是否可以使用一个位置来过滤?像“这个”的东西:

SELECT col_id, col_name FROM dataTable WHERE #2 LIKE '%Peter%'

3 个答案:

答案 0 :(得分:2)

没有。 WHERE子句在SELECT列表之前进行(逻辑)评估,因此它不能按编号引用SELECT列表项,因为它们尚未编号。

可以在ORDER BY中执行此操作,因为评估了所选列列表后评估的,因此您可以按编号引用列(虽然那是not recommended)或别名。

此外,即使有可能,它也会使您的SQL更脆弱,更难阅读。

答案 1 :(得分:1)

WHERE 条款在select子句

之前运行

这是逻辑查询流程

  1. [来自]
  2. [如果]
  3. [聚合]
  4. [SELECT]
  5. [订购]
  6. [超过]
  7. [鲜明]
  8. [顶端]
  9. FOR EXAMPLE

答案 2 :(得分:0)

DECLARE @i TINYINT = 2

SELECT col_id, [col_name]
FROM dataTable
WHERE
    CASE @i
        WHEN 1 THEN col_id
        WHEN 2 THEN [col_name]
    END LIKE '%Peter%'