Ответ 1
Джоэл говорит, что @SearchLetter еще не объявлен? Также длина @SearchLetter2 не достаточно длинна для 't%'. Попробуйте varchar более длинной длины.
У меня есть sproc (MSSQL 2k5), который примет переменную для клана LIKE, например:
DECLARE @SearchLetter2 char(1)
SET @SearchLetter = 't'
SET @SearchLetter2 = @SearchLetter + '%'
SELECT *
FROM BrandNames
WHERE [Name] LIKE @SearchLetter2 and IsVisible = 1
--WHERE [Name] LIKE 't%' and IsVisible = 1
ORDER BY [Name]
К сожалению, строка, выполняемая в настоящее время, генерирует синтаксическую ошибку, тогда как комментарий, в котором выполняется предложение, отлично. Может ли кто-нибудь помочь мне получить работу без комментариев?
Джоэл говорит, что @SearchLetter еще не объявлен? Также длина @SearchLetter2 не достаточно длинна для 't%'. Попробуйте varchar более длинной длины.
Если вы используете хранимую процедуру:
ALTER PROCEDURE <Name>
(
@PartialName VARCHAR(50) = NULL
)
SELECT Name
FROM <table>
WHERE Name LIKE '%' + @PartialName + '%'
Как говорит Эндрю Брауэр, но добавляя отделку
ALTER PROCEDURE <Name>
(
@PartialName VARCHAR(50) = NULL
)
SELECT Name
FROM <table>
WHERE Name LIKE '%' + LTRIM(RTRIM(@PartialName)) + '%'
DECLARE @SearchLetter2 char (1)
Установите для этого более длинный char.
Это работает для меня в DB образца Northwind, обратите внимание, что SearchLetter имеет 2 символа, и SearchLetter также должен быть объявлен для этого:
declare @SearchLetter2 char(2)
declare @SearchLetter char(1)
Set @SearchLetter = 'A'
Set @SearchLetter2 = @SearchLetter+'%'
select * from Customers where ContactName like @SearchLetter2 and Region='WY'
Но, на мой взгляд, одна важная вещь.
"char (число)", это длина переменной.
Если у нас есть таблица с "Именами", например, [Test1..Test200], и мы объявляем char (5) в SELECT как:
DECLARE @variable char(5)
SET @variable = 'Test1%'
SELECT * FROM table WHERE Name like @variable
результат будет только - "Test1"! (char (5) - 5 символов в длину, Test11 - 6)
Остальные потенциальные интересующие данные, такие как [Test11..Test200], не будут возвращены в результате.
Это нормально, если мы хотим ограничить SELECT таким образом. Но если это не преднамеренный способ сделать это, можно вернуть неверные результаты из запланированных (Как "все имена, начинающиеся с Test1..." ).
На мой взгляд, если мы не знаем точную длину значения SELECT, лучшим решением может быть что-то вроде этого:
DECLARE @variable varchar(max)
SET @variable = 'Test1%'
SELECT * FROM <table> WHERE variable1 like @variable
Это возвращает (Test1, а также Test11..Test19 и Test100..Test199).
Мы можем писать напрямую...
DECLARE @SearchLetter CHAR(1)
SET @SearchLetter = 'A'
SELECT *
FROM CUSTOMERS
WHERE CONTACTNAME LIKE @SearchLetter + '%'
AND REGION = 'WY'
или следующим образом, если нам нужно добавить все символы поиска,
DECLARE @SearchLetter CHAR(1)
SET @SearchLetter = 'A' + '%'
SELECT *
FROM CUSTOMERS
WHERE CONTACTNAME LIKE @SearchLetter
AND REGION = 'WY'
Оба они будут работать
Это может быть так просто, как LIKE '%%[%3]%%'
быть [%3]
входной переменной.
Это работает для меня с SAP B1 9.1
У меня также была проблема с использованием локальных переменных в LIKE.
Важно знать: как долго переменная.
Ниже ORDER_NO имеет длину 50 символов, поэтому вы не можете использовать: LIKE @ORDER_NO, потому что в конце будут пробелы.
Сначала нужно обрезать правую часть переменной.
Как это:
DECLARE @ORDER_NO char(50)
SELECT @ORDER_NO = 'OR/201910/0012%'
SELECT * FROM orders WHERE ord_no LIKE RTRIM(@ORDER_NO)