Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2011, 09:16   #1
nuuta
 
Регистрация: 20.07.2011
Сообщений: 5
По умолчанию Запрос на выборку нерусских

Здравствуйте!
Есть названия книг, нужно выбрать все книги не на русском языке, при этом названия могут начинаться и с пробелов, и с кавычек, могут содержать как английские так и русские буквы. Но нужны только полностью нерусские! Помогите пожалуйста, голову сейчас сломаю.
Заранее спасибо!
nuuta вне форума Ответить с цитированием
Старый 20.07.2011, 09:34   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

все что НЕ содержит русских букв == NOT содержит хотя бы одну русскую букву
Код:
select * from T
where idbook not in ( select idbook from t 
                      where ( bookname lije "%А%
                           or bookname like "%Б%" 
                           .... 
                           or bookname like "%Я%" )  )
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.07.2011 в 09:39.
evg_m вне форума Ответить с цитированием
Старый 20.07.2011, 09:56   #3
nuuta
 
Регистрация: 20.07.2011
Сообщений: 5
По умолчанию

это слишком длинно, можно как-то регулярными выражениями...
nuuta вне форума Ответить с цитированием
Старый 20.07.2011, 10:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

evg_m, вполне себе решение....

только:
1) если я не ошибаюсь, то оператор LIKE регистрочувствительный (поэтому надо проверять и большие и малые буквы
.. or bookname LIKE '%Ф%' or bookname LIKE '%ф%' or ...
или использовать функцию Upper()
or Upper(bookname) LIKE '%Ф%'

2) запросец будет КРАЙНЕ малоэффективным в плане производительности!

3) в зависимости от используемой СУБД можно попытаться чуток упросить/убыстрить запрос (использовав специфические для данной СУБД функции...)


Цитата:
Сообщение от nuuta
это слишком длинно, можно как-то регулярными выражениями...
а Ваша СУБД поддерживает регулярные выражения? Если да - то каким образом?
дело в том, что в стандартном SQL нет регулярных выражений (ну, если не считать оператор LIKE)///

Последний раз редактировалось Serge_Bliznykov; 20.07.2011 в 10:24.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.07.2011, 07:53   #5
nuuta
 
Регистрация: 20.07.2011
Сообщений: 5
По умолчанию

у меня oracle 10, запрос я уже написала с регулярными выражениями, оказалось проще простого))) кому интересно могу выложить, но все равно спасибо за помощь!
nuuta вне форума Ответить с цитированием
Старый 21.07.2011, 08:13   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
у меня oracle 10
вот это вчера утром и надо было написать в своём сообщении с вопросом...


кстати, если не ошибаюсь, то регулярные выражения появились только в Oracle 10.
но до этого подобные задачки можно было решить (ну лично я решал) с помощью функции TRANSLATE
вот, например, запрос, который вернёт только те записи, в названии книг которых НЕТ НИ ОДНОЙ РУССКОЙ БУКВЫ:
Код:
select bookname from Books 
where INSTR(TRANSLATE(upper(Books.bookname),'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ','ААААААААААААААААААААААААААААААААА'),'А') =0

Последний раз редактировалось Serge_Bliznykov; 21.07.2011 в 08:58.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.07.2011, 12:09   #7
nuuta
 
Регистрация: 20.07.2011
Сообщений: 5
По умолчанию

в девятом тоже были регулярные, мы в прошлом году обновлялись до десятки и до этого ими пользовались еще) а кстати это стиль такой или так надо, я вот допустим всем текстовым полям делаю lower(), а многие делают upper(). Это фишка такая? или просто кому как удобнее?

p.s. запрос мой:
select t.* from vw_wp_sources_non_virtua t
where regexp_like(lower(t.name),'[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]{1,}')
nuuta вне форума Ответить с цитированием
Старый 21.07.2011, 13:20   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
я вот допустим всем текстовым полям делаю lower(), а многие делают upper(). Это фишка такая? или просто кому как удобнее?
разумеется, никакой разницы... только чтобы и левая и правая часть к одному регистру была приведена, а lower() или upper() - абсолютно индифферентно!

Цитата:
p.s. запрос мой:
угу. понятно.

кстати, если это Вам нужно в реальной жизни и объёмы данных большие, может сравните эти два варианта по быстродействию?... (если объёмы в таблице не большие - то смысла нет, а вот если большие.... )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.07.2011, 12:18   #9
nuuta
 
Регистрация: 20.07.2011
Сообщений: 5
По умолчанию

сравнила запросы, выдают разные результаты, ваш запрос меньше строк выдает, пока не разбиралась почему, времени не хватает...но работают примерно одинаково по времени, если бы результат был одинаков)
nuuta вне форума Ответить с цитированием
Старый 22.07.2011, 12:39   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
сравнила запросы, выдают разные результаты, ваш запрос меньше строк выдает...
ну, во-первых, Вы имеете в виду такой Ваш запрос ?
Код:
select t.* from vw_wp_sources_non_virtua t 
where Not regexp_like(lower(t.name),'[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]{1,}')
а во-вторых, я на своей табличке прогнал. у меня совпало (и количество и конкретно записи, не содержащие кириллицу)...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку ...Оленька... SQL, базы данных 1 20.12.2010 20:13
Запрос на выборку pobedin SQL, базы данных 7 12.12.2010 19:16
С# Запрос на выборку fobass Общие вопросы .NET 2 04.02.2010 14:26
Запрос на выборку Like Agapov_stas Microsoft Office Access 3 02.12.2009 11:09
Запрос на выборку Ruska882009 Microsoft Office Access 2 26.02.2009 20:39