2010-06-28 73 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

相关问题