2016-10-04 10 views
0

я следующая таблица в MS SQL Server:Выполнение запроса на выборку, где с помощью «LIKE» и «ISNULL» не дает мне ожидаемый результат в MS SQL Server

Value CustomerName     Date 
------------------------------------------------------------------- 
1  Sam[Sammy]     2016-09-30 11:13:15.550 
2  Rimi       2016-09-30 11:13:15.550 

Я бегу следующее запрос для выборки данных:

SELECT * 
FROM Table 
WHERE CONVERT(varchar, convert(date,BillDate), 112) = '20160930' AND 
     CustomerName LIKE isnull(NULL,CustomerName) 

у нас есть форма поиска клиента, который имеет поле даты и клиент пользователь Имя field.The имеет возможность поиска, используя имя клиента, но это необязательно.

Вышеприведенный запрос используется для поиска клиентов, использующих только поле Date. Теперь, когда мы запускаем запрос для поиска клиентов, он не приносит ожидаемого результата. Имя CustomerName с квадратными скобками '[]' в их именах отсутствует.

Мы не можем удалить квадратные скобки в именах.

Есть ли способ решить эту проблему?

+0

Почему вы используете 'LIKE' для сравнения? Поскольку вы используете 'LIKE', вам нужно избегать символов, имеющих особое значение для' LIKE'. –

+0

'LIKE isnull (NULL, CustomerName)' такое же, как 'CustomerName LIKE CustomerName'. Я уверен, что это не то, что вы имеете в виду? – Fred

+0

Спасибо за ответ:) Это форма поиска, и я вижу «LIKE» как лучший вариант для поиска имен клиентов. Есть ли другой способ, конечно, оставляя «=»? Если мне нужно избегать персонажей, как это сделать в этом случае? – Bridget

ответ

0

Квадратные скобки должны быть экранированы. Этот вопрос уже был дан ответ здесь:

How can I escape square brackets in a LIKE clause?

+0

Ну, я прошел через это, прежде чем публиковать этот вопрос. Как использовать его с функцией isnull, где я просто передаю значение null? – Bridget

+0

@Bridget: Почему бы просто не использовать следующий запрос, предполагая, что никто не будет искать [или], а только имена или часть имени. 'SELECT * FROM Таблицы WHERE CONVERT (VARCHAR, конвертировать (дату, BillDate), 112) = '20160930' AND CUSTOMERNAME LIKE '% сэм%'' Или когда никакого имени клиента не Входящее только дата: 'SELECT * FROM Таблица WHERE CONVERT (varchar, convert (date, BillDate), 112) = '20160930' AND CustomerName LIKE '%%'' Этот способ экранирования и ISNULL не требуется. – Bouke

+0

Это то, что мы будем делать. Единственный выход. LIKE и ISNULL не идут рука об руку в случае подстановочных знаков. – Bridget

 Смежные вопросы

  • Нет связанных вопросов^_^