2010-06-28 133 views
12

想象一下,我有以下的SELECT語句的視圖(SQL Server 2008中):指定數據類型在SQL Server中列別名2008

SELECT (SELECT CASE 
       WHEN HISTORY.OUTOFSERV = 'Y' OR HISTORY.OUTOFSERV = 'y' THEN 1 
       ELSE 0 
       END) AS OOS 
    FROM HISTORY 

列OOS結束是int類型的,但我喜歡它是類型位。我怎樣才能做到這一點?

回答

24

使用CAST/CONVERT明確定義的數據類型:

SELECT CAST (CASE 
       WHEN LOWER(h.outofserv) = 'y' THEN 1 
       ELSE 0 
      END AS BIT) AS OOS 
FROM HISTORY h 
+1

完美!謝謝。 – 2010-06-28 21:08:29

4

,你應該只使用CAST(1 as bit)CAST(0 as bit)而不是1和0:

SELECT (CASE WHEN HISTORY.OUTOFSERV = 'Y' OR HISTORY.OUTOFSERV = 'y' 
      THEN CAST(1 AS bit) 
      ELSE CAST(0 AS bit) 
     END) AS OOS 
FROM HISTORY 
+0

這是我用例的最佳解決方案,謝謝。 – Yass 2017-11-17 14:46:14

+0

@Yass:不客氣! – Oleg 2017-11-17 14:49:08

2

這裏有一種方式來獲得所需的位數據類型的輸出,並用一點清潔劑代碼使用:

  • upper()
  • 鑄造()

    SELECT CAST(CASE
    WHEN UPPER(History.OutofServ)= 'Y' THEN 1
    ELSE 0 END AS BIT)AS OOS 歷史

我希望有所幫助。

+0

+1的'上'位 – Earlz 2010-06-28 21:06:41