2016-02-02 111 views
0

通常我們使用列來篩選SQL語句是否有可能使用WHERE位置選擇sqlserver數據?

SELECT col_id, col_name FROM dataTable WHERE col__id>5 

使用位置責令其是可能的:ORDER BY 1 DESC

是否有可能使用過濾的位置?像「這個」:在SELECT列表之前

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

即使是使用了'爲了by'已棄用的位置;它不再是ANSI標準。 –

+0

我不知道!謝謝 – Andynedine

回答

2

號的WHERE子句(邏輯)評估,因此無法通過數字指SELECT列表項,因爲它們還沒有被編號。

有可能做爲所選定列的列表中進行評估後,評估做在ORDER BY,這樣你就可以通過數字引用列(儘管這not recommended)或別名。

此外,即使可能,它也會讓你的SQL更加脆弱和難以閱讀。

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%' 
1

WHERE子句SELECT子句

這裏之前運行的邏輯查詢流量

  1. [從]
  2. [如果]
  3. [聚合]
  4. [SELECT ]
  5. [排序]
  6. [在]
  7. [鮮明]
  8. [置頂]

FOR EXAMPLE

+0

where子句在'select'子句之前不運行*。它首先被邏輯處理。 –

相關問題