удалить запись содержит `%` - PullRequest
       3

удалить запись содержит `%`

0 голосов
/ 14 февраля 2011

Я хочу удалить запись, которая содержит знак %, например:

white% House, Den% mark, bengali% 20Tiger, White% 202.

У меня есть этот запрос, но он не работает для меня.

delete from nail where name like '%[%]%'

Я использую C # и Access.

Ответы [ 5 ]

1 голос
/ 14 февраля 2011

Вы можете использовать InStr(), чтобы найти, содержит ли имя%

where InStr(name, '%') > 0
1 голос
/ 14 февраля 2011

Я думаю, что происходит некоторая путаница, поэтому вот полный пример кода, который работает для меня:

using ( var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\users\john\desktop\Database11.accdb;Persist Security Info=False;"))
{
     conn.Open();
     OleDbCommand cmd = 
         new OleDbCommand("DELETE FROM TABLE1 where [name] like '%[%]%'", conn);
     cmd.ExecuteNonQuery();

     cmd.Dispose();
     conn.Close();
}

Обратите внимание, что вы используете «имя» в качестве одного из ваших полей,зарезервированное слово, поэтому вам нужно избегать его внутри скобок.То же самое касается%, так как это символ подстановки, который используется OLEDb.

0 голосов
/ 24 февраля 2011

Для полноты:

В MS Access, работающем в режиме SQL по умолчанию (ANSI 89), вы должны использовать:

  Like "*%*"

Аналогично, если вы используете DAO для выполненияSQL, вы бы его использовали.

Проблемы возникают только при работе в режиме ANSI 92, который доступен в Access, только если у вас включен ANSI 92 или если вы используете ADO,или если вы используете ALIKE вместо LIKE.В этом случае вы должны использовать более стандартный % подстановочный знак.Если вы работаете в Access или используете DAO, вы можете использовать ALIKE, чтобы разрешить использовать подстановочный знак %:

ALike "% [%]%"

Но есливы запускаете Access в режиме SQL 92, вам вообще не нужен ALIKE, вы можете просто использовать LIKE (но я бы никогда не рекомендовал запускать Access в режиме SQL 92, так как это ломает некоторые вещи в Access).

Если вы используете ADO / OLEDB для выполнения SQL, единственным вариантом является режим SQL 92, и вы должны иметь возможность либо ALike "%[%]%", либо Like "%[%]%".Я не знаю, имеют ли двойные кавычки разницу или нет.В моих тестах с использованием ADO в Access это не имело никакого значения.

0 голосов
/ 14 февраля 2011

у меня работает родной в MS Access

DELETE foo.foo1
FROM foo
WHERE (((foo.foo1) ALike "%[%]%"));

Может быть, это двойные кавычки вместо апострофов.

Возможно, в C # вам нужно сделать что-то вроде

bar = "DELETE foo.foo1 FROM foo WHERE (((foo.foo1) ALike \"%[%]%\"));";
0 голосов
/ 14 февраля 2011

попробуй:

delete from nail where name like '%[[%]%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...