Предположите, что у меня есть следующий оператор SELECT в представлении (SQL Server 2008):
SELECT (SELECT CASE
WHEN HISTORY.OUTOFSERV = 'Y' OR HISTORY.OUTOFSERV = 'y' THEN 1
ELSE 0
END) AS OOS
FROM HISTORY
Столбец OOS заканчивает тем, что был интервала типа, но я хотел бы, чтобы он был бита типа. Как я могу выполнить это?
Используйте CAST/CONVERT для явного определения типа данных:
SELECT CAST (CASE
WHEN LOWER(h.outofserv) = 'y' THEN 1
ELSE 0
END AS BIT) AS OOS
FROM HISTORY h
вам следует просто используйте CAST (1 как бит)
и CAST (0 как бит)
вместо 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
Вот способ получить желаемый выходной тип данных BIT и немного более чистый код, используя:
cast ()
SELECT CAST (CASE
КОГДА UPPER (History.OutofServ) = 'Y' THEN 1
Иначе 0
КОНЕЦ КАК БИТЬ) КАК OOS
ИЗ истории
Надеюсь, это поможет.