Próbuję przechwycić nazwę zmiennej T-SQL, upewniając się, że wartość zmiennej jest poprzedzana nawiasem "[".Dlaczego operator "LIKE" T-SQL nie ocenia tego wyrażenia, tak jak myślę, że powinien?
Oto przykład jak próbuję to zrobić:
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
Powyższy przykład druku [[55555
Zauważ, że oryginalna wartość @thing została poprzedzona wspornika „[”. Oczekiwano, że warunki IF zwrócą fałsz od "[55555" is LIKE '[' + '%'
Dlaczego warunek IF nie zwraca wartości false? I, co ważniejsze, przypuszczam, jaka jest poprawna składnia do sprawdzenia istnienia ciągu znaków, który występuje na początku wartości zmiennej łańcuchowej?
EDIT Wygląda na to, że w uchwycie jest coś specjalnego "[". Kiedy uruchamiam LIKE na wsporniku, nie robi to, czego się spodziewam, ale kiedy nie używam nawiasu, LIKE działa w sposób, jakiego oczekuję.
Sprawdź te przykłady:
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
Oto wyjście z dwóch warunków:
[NIE PODOBA [
STACKO jest jak StackO
Jakakolwiek różnica w przypadku użycia ''[%'' a nie formy z konkatenacją? –
Nie. Nie ma różnicy. Pierwsza próba Użyłem twojej wersji W wypróbowaniu innej składni zapomniałem przenieść ją z powrotem do og '[%] przed publikacją – Jed