Задавайте вопросы, мы ответим
Вы не зашли.
DBO.LOCAL
ID Admins
1 “Local_Name_1”, “Local_Name_2”
2 “Local_Name_2”, “Local_Name_1”
3 “Local_Name_1”, “Local_Name_2”, “DC\Name_1”, “DC\Name_2”
4 “Local_Name_2”, “DC\Name_2”, “DC\Name_1”
5 “Local_Name_1”, “Local_Name_2”, “DC\Name_1”, “DC\Name_2”, “DC\123”
6 “Local_Name_1”, “Local_Name_2”, “DC\Name_2”, “DC\Name_1”, “DC\321”
7 “Local_Name_1”, “Local_Name_2”, “DC\Name_1”, “DC\555”, “DC\Name_2”
8 …
SELECT *
FROM DBO.LOCAL
WHERE Name Like ‘%DC\%’
Добрый день!
Подскажите, как в MySQL составить запрос так, чтобы выборка была только по тем строкам, в который присутствует “%DC\%”, но исключая поиск по именам DC\Name_1 и DC\Name_2.
В данном примере, мне нужно выбрать строки: 5, 6, 7.
Составленный мною запрос выбирает строки: 3, 4, 5, 6, 7
Т.е. по логике нужно составить такой запрос
SELECT *
FROM DBO.LOCAL
WHERE Name Like ‘%DC\[ТУТ МОЖЕТ БЫТЬ ЧТО УГОДНО, ОТЛИЧНОЕ от DC\Name_1 или ОТЛИЧНОЕ от DC\Name_2]'
Неактивен
Так и оперируйте like и (not like).
Неактивен
Если я напишу
LIKE %DC\%
AND NOT LIKE %DC\Name_1%
То, он по идее исключит все строки содержащие %DC\Name_1%, даже те в которые есть %DC\123%
А мне не важно содержит строка %DC\Name_1% или %DC\Name_2%
Важно, чтобы выборка была по тем строкам, в которых есть %DC\[ЛЮБЫЕ СИМВОЛЫ]%, но не нужны те строки, в которых есть %DC\Name_1% или %DC\Name_2%, и нету %DC\[ЛЮБЫЕ СИМВОЛЫ]%
Отредактированно HFShak (27.02.2012 13:16:34)
Неактивен
Скажем проще, как мне выбрать строки 3,4,6,10,11
В данной таблице:
DBO.LOCAL
ID Admins
1 “qwerty123”, “qwerty321”
2 “qwerty321”, “qwerty123”, “DC\Name_1”
3 “qwerty123”, “DC\Name_1”, “DC\sadfaf”
4 “DC\Name_1”, “DC\Name_2”, “DC\vqevreq”
5 “qwerty321”, “qwerty123”, “DC\Name_1”, “DC\Name_2”
6 “DC\tgfwhfb”
7 “DC\Name_1”, “DC\Name_2”
8 “DC\Name_2”, “DC\Name_1”
9 “DC\Name_2”, “qwerty321”
10 “DC\fewvewwe”, “DC\Name_1”, “DC\Name_2”
11 “DC\Name_1”, "DC\grejgvbrewj", “DC\Name_2”
12 “qwerty123”, “DC\Name_1”
13 …
Отредактированно HFShak (27.02.2012 13:25:03)
Неактивен
Вероятно можно соорудить какой-либо костыль через str_replace, find и прочие функции для работы со строками, но не проще ли было бы дикую структуру преобразовать в более удобоваримую табличку, где имена машин будут храниться не через запятую, а каждое в своей записи?
Неактивен
deadka написал:
Вероятно можно соорудить какой-либо костыль через str_replace, find и прочие функции для работы со строками, но не проще ли было бы дикую структуру преобразовать в более удобоваримую табличку, где имена машин будут храниться не через запятую, а каждое в своей записи?
Эту таблицу более удобной не сделать, т.к. это список пользователей локальных групп на машинах. Их может быть очень много, не к чему столько столбцов...
Неактивен
Я отнюдь не имел в виду много столбцов. Скорее говорил про
хранение строки “qwerty321”, “qwerty123”, “DC\Name_1” в виде
qwerty321”
“qwerty123”
“DC\Name_1”
Неактивен
deadka написал:
Я отнюдь не имел в виду много столбцов. Скорее говорил про
хранение строки “qwerty321”, “qwerty123”, “DC\Name_1” в виде
qwerty321”
“qwerty123”
“DC\Name_1”
Ну может такое и будет возможно, но не сейчас...
Неактивен
HFShak написал:
Если я напишу
LIKE %DC\%
AND NOT LIKE %DC\Name_1%
То, он по идее исключит все строки содержащие %DC\Name_1%, даже те в которые есть %DC\123%
А Вы попробуйте. Если не получится, приложите дамп таблички, поковыряю.
Неактивен
deadka написал:
HFShak написал:
Если я напишу
LIKE %DC\%
AND NOT LIKE %DC\Name_1%
То, он по идее исключит все строки содержащие %DC\Name_1%, даже те в которые есть %DC\123%А Вы попробуйте. Если не получится, приложите дамп таблички, поковыряю.
Именно так, он исключил все строки содержащие %DC\Name_1% и не важно, что в них кроме DC\Name_1 содержится и DC\wqfasfasf
Неактивен
ИМХО, при такой структуре только через костыль как предлагал deadka ( http://sqlinfo.ru/forum/viewtopic.php?pid=30677#p30677 )
Но такой запрос будет жутко (нет очень ЖУТКО) тормозить. Лучше все-таки изменить структуру.
Неактивен
Ну хочет топикстартер костыль, что ж тут сделаешь.
HFShak, зря дамп не приложили . Костыль можно как сделать: с помощью функции replace заменяете неугодные Вам DC\Name_1, DC\Name_2 и прочее на пустую строку. И из получившейся выборки вытягиваете те строки, в которых DC присутствует.
Неактивен
deadka написал:
Ну хочет топикстартер костыль, что ж тут сделаешь.
HFShak, зря дамп не приложили . Костыль можно как сделать: с помощью функции replace заменяете неугодные Вам DC\Name_1, DC\Name_2 и прочее на пустую строку. И из получившейся выборки вытягиваете те строки, в которых DC присутствует.
Вообщем как обычно..., excel решает все проблемы.
Кстати, тут подумал насчет такого варианта:
SELECT *
FROM DBO.LOCAL
WHERE Name Like ‘%DC\[^N]%’
Типо выбрает все имена, которые не начинаются на букву "N"
Может в этот духе что-нибудь можно придумать?
Неактивен
Не пойму, при чем тут excel. Последний мой вариант решил задачу?
Механизм regexp есть, да, можно так попробовать.
Неактивен
deadka написал:
Не пойму, при чем тут excel. Последний мой вариант решил задачу?
Механизм regexp есть, да, можно так попробовать.
Я не хочу кастыль, должно быть простое решение выборки.
Я ведь могу задать все возможные слова в LIKE не задавая Name_1 и Name_2, тогда почему я не могу сделать обратного?
Мне просто надо, чтобы слова DC\Name_1 и DC\Name_2 не выбиралась и не не выбирались, а просто пропускалась во время выборки.
Что такое regexp ?, я с sql объщаюсь первый день
Неактивен
HFShak написал:
deadka написал:
Не пойму, при чем тут excel. Последний мой вариант решил задачу?
Механизм regexp есть, да, можно так попробовать.Я не хочу кастыль, должно быть простое решение выборки.
Присоединяюсь ко мнению vasya, что костыль здесь любое другое решение кроме правильной организации хранения данных, которое Вы делать не хотите. replace, регулярное выражение, какие-то хитрые манипуляции - все это костыли в данном случае.
HFShak написал:
Что такое regexp ?, я с sql объщаюсь первый день
Регулярное выражение. К sql это не имеет особого отношения, но в mysql есть механизм для их использования, правда слабенький, см. regexp.
Неактивен
deadka написал:
HFShak написал:
deadka написал:
Не пойму, при чем тут excel. Последний мой вариант решил задачу?
Механизм regexp есть, да, можно так попробовать.Я не хочу кастыль, должно быть простое решение выборки.
Присоединяюсь ко мнению vasya, что костыль здесь любое другое решение кроме правильной организации хранения данных, которое Вы делать не хотите. replace, регулярное выражение, какие-то хитрые манипуляции - все это костыли в данном случае.
HFShak написал:
Что такое regexp ?, я с sql объщаюсь первый день
Регулярное выражение. К sql это не имеет особого отношения, но в mysql есть механизм для их использования, правда слабенький, см. regexp.
Хорошо, Вопрос №1: скажем у меня пишутся коменты на форуме, как их правильно следует хранить? Минимальное сообщение коментария от 10 слов.
Вопрос №2: Я могу исключить символ из запроса (Where Name Like '%[^N]%'). Возможно ли (путем переменных или как нибудь еще) исключить не символ, а слово? Можно на этот вопрос ответить "да" или "нет"?
Отредактированно HFShak (27.02.2012 17:22:17)
Неактивен
1. Если Вы знаете максимальный размер комментария (ну допустим 65535 символов), то сделайте тип varchar(65535).
2. http://dev.mysql.com/doc/refman/5.1/en/regexp.html
Неактивен
deadka написал:
1. Если Вы знаете максимальный размер комментария (ну допустим 65535 символов), то сделайте тип varchar(65535).
2. http://dev.mysql.com/doc/refman/5.1/en/regexp.html
SQL server manager studio не понимает, что такое REGEXP , это от субд зависит?
Неактивен
HFShak написал:
Подскажите, как в MySQL составить запрос так, чтобы выборка была только по тем строкам, в который присутствует “%DC\%”, но исключая поиск по именам DC\Name_1 и DC\Name_2.
Данный форум посвящен именно MySQL, а не MSSQL, и всё, что писалось выше относилось именно к MySQL. Есть ли в MSSQL механизм regexp я, честно говоря, просто не знаю, попробуйте задать этот вопрос на соответствующем разделе например на sql.ru.
Но я фактически уверен, что функция типа replace там есть (см. соответсвующий раздел справки), так что предложенный костыль должен сработать и там. MSSQL-сервера под рукой, чтобы проверить также, увы, не имею.
Неактивен
Можно сделать так:
Неактивен