¿Es posible usar un operador de comparación en una función CONVERT o CAST?¿Por qué la comparación no funciona en CONVERTIR?
Tengo una declaración que tiene este aspecto:
SELECT
...
CASE field
WHEN 'Y' THEN 1 # If Y then True
ELSE 0 # Anything else is False
END
...
FROM ...
Algo similar ocurre durante algunos campos, por lo que le gustaría cambiar a una versión más corta:
SELECT
...
CONVERT(BIT, field = 'Y')
...
FROM ...
pero MSSQL está dando un error Incorrect syntax near '='.
Mi interpretación de la ayuda es que debería funcionar:
CONVERT (data_type [ (length) ] , expression [ , style ])
expression: expression { binary_operator } expression
binary_operator
: es un operador que define la forma en dos expresiones se combinan para producir un solo resultado. binary_operator puede ser un operador aritmético, el operador de asignación (=), un operador bit a bit, un operador de comparación, un operador lógico, el operador de concatenación de cadenas (+) o un operador unario.comparison operator: (= | > | < | >= | <= | <> | != | !< | !>)
Me corrieron algunas pruebas y tiene los siguientes resultados:
SELECT CONVERT(BIT, 0) // 0
SELECT CONVERT(BIT, 1) // 1
SELECT CONVERT(BIT, 1+2) // 1
SELECT CONVERT(BIT, 1=2) // Error
SELECT CONVERT(BIT, (1=2)) // Error
SELECT CONVERT(BIT, (1)=(2)) // Error
campo = 'Y' es una tarea, no una expresión. En cualquier caso, un tipo de datos de bit solo puede contener un 0 o 1. La sentencia CASE es correcta ya que asigna 1 cuando field = 'Y'. –