Estoy tratando de capturar un nombre de variable T-SQL al asegurarme de que el valor de la variable esté prefijado con un paréntesis "[".¿Por qué el operador T-SQL "LIKE" no evalúa esta expresión como creo que debería?
Aquí hay un ejemplo de cómo estoy tratando de hacer esto:
DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(@thing NOT LIKE '[' + '%') --If the value does not start with [ then add it
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing
El ejemplo anterior de imprimir Nota [[55555
que el valor original de @thing se prefija con el soporte "[". Esperaba que la condición IF hubiera resultado falsa desde "[55555" is LIKE '[' + '%'
¿Por qué la condición IF no devuelve falso? Y, lo que es más importante, supongo, ¿cuál es la sintaxis correcta para verificar la existencia de una cadena que aparece al comienzo de un valor de cadena variable?
EDIT Parece que hay algo especial acerca del soporte "[". Cuando ejecuto LIKE en un paréntesis, no hace lo que esperaba, pero cuando no uso un paréntesis, LIKE funciona de la manera que espero.
Salida estos ejemplos:
IF('[' NOT LIKE '[')
BEGIN
PRINT '[ is NOT LIKE ['
END
ELSE
BEGIN
PRINT '[ is LIKE ['
END
IF('StackO' NOT LIKE 'StackO')
BEGIN
PRINT 'STACKO is NOT LIKE StackO'
END
ELSE
BEGIN
PRINT 'STACKO is LIKE StackO'
END
Aquí está la salida de las dos condiciones:
[no es como [
STACKO es como STACKO
Cualquier diferencia si usa ''[%'' y no la forma con concatenación? –
No. Sin diferencia. En realidad, en mi primer intento que utilicé su versión. Al intentar una sintaxis diferente, me olvidé de volver a colocarla en el og '[%' antes de publicar. – Jed