Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выбрать все строки НЕ содержащие символов кириллицы  [new]
hope1
Guest
Как?)
23 янв 13, 22:02    [13818283]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
hope1,

where field1 not like '%[^а-я]%'
Не советую использовать буквально, много дыр. Скорее, пища для размышления.
23 янв 13, 22:18    [13818336]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
галка вверх, по-моему, лишняя...

Есличо, я - блондинко
23 янв 13, 23:44    [13818629]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
aleks2
Guest
Ennor Tiegael
hope1,

where field1 not like '%[^а-я]%'
Не советую использовать буквально, много дыр. Скорее, пища для размышления.

Хреново.

1. Символов кириллицы не так уж многа

-- ну, таблицу понятно надо постоянную
declare @cyr table(c nchar(1) primary key clustered)

insert @cyr
  values (N'a'), (N'б'), ...

select *
from aTable
where not exists( select * from @cyr where  aTable.field1 like '%'+c+'%' )
24 янв 13, 06:48    [13819138]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
SIMPLicity_,

Галка лишняя, согласен.
24 янв 13, 08:46    [13819272]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ennor Tiegael
hope1,

where field1 not like '%[^а-я]%'
Не советую использовать буквально, много дыр. Скорее, пища для размышления.
[а-я] всегда содержит все символы кириллицы, да?
LIKE '%[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]%'
24 янв 13, 09:14    [13819406]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
-- таблица символов
declare @s nvarchar(200)='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяёЁ'
declare @t table(c1 int,c2 int,c3 int,c4 int,c5 int,c6 int) -- 33х2=66/6=11.0
while len(@s)>=1 begin
	insert @t
	select ASCII(SUBSTRING(@s,1,1)), ASCII(SUBSTRING(@s,2,1)), ASCII(SUBSTRING(@s,3,1)), ASCII(SUBSTRING(@s,4,1)), ASCII(SUBSTRING(@s,5,1)), ASCII(SUBSTRING(@s,6,1))
	set @s=SUBSTRING(@s,7,200)
end
select CHAR(c1) a1,c1, CHAR(c2) a2,c2, CHAR(c3) a3,c3, CHAR(c4) a4,c4, CHAR(c5) a5,c5, CHAR(c6) a6,c6 from @t

-- решение
;with myTable as(select * from(values('asdfgh'),('asdЫfg')) tmp(myField))
select * from myTable where myField not like '%[А-яЁё]%'
хотя явное (но длинное) перечисление все же надежнее))
24 янв 13, 09:20    [13819427]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Cygapb-007
like '%[А-яЁё]%'

Под это условие попадает разная кириллическая экзотика, типа такого (дальше идёт ASCII-код и символ):
128 Ђ
129 Ѓ
131 ѓ
138 Љ
140 Њ
141 Ќ
142 Ћ
143 Џ
Для типа данных nchar символов будет больше, чем для char. Вопрос, нужна ли автору эта экзотика.

Вот запрос для получения символов, которые like '%[А-яЁё]%' :
+
create database test_cyr collate cyrillic_general_cs_as;
go
use test_cyr;
go
declare @i int;
set @i = 1;
while @i <= 255
begin
   if char(@i) like '[А-яЁё]'
     print cast(@i as varchar(10)) + char(9) + char(@i);
   set @i = @i + 1;
end;
go
use master;
go
drop database test_cyr;
go
24 янв 13, 11:12    [13820134]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
[а-я] всегда содержит все символы кириллицы, да?
LIKE '%[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]%'

А это условие обрабатывает только символы русского алфавита, что в общем случае не равно "кириллице"

В общем, ждём ответа автора, что для него есть "кириллица".
24 янв 13, 11:15    [13820158]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Гость333
iap
[а-я] всегда содержит все символы кириллицы, да?
LIKE '%[абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]%'

А это условие обрабатывает только символы русского алфавита, что в общем случае не равно "кириллице"

В общем, ждём ответа автора, что для него есть "кириллица".
А что, [а-я] лучше?
Мало того, что в регистрозависимом COLLATE заглавные буквы игнорируются,
так ещё не все русские символы попадают и попадает мусор - в зависимости от COLLATE
24 янв 13, 11:22    [13820213]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
iap,

Калі ў апошні раз вы бачылі ўсё кадоўкі кірыліцы? :)

А еще есть болгарский, македонский, сербский и куча других языков, использующих данный чарсет. И там есть куча символов, которых нет в русском и которые привел Гость333 в качестве примера.

На самом деле, я вообще не уверен, что данная задача решаема в исходной формулировке. Учитывая, что в сиквеле UCS-2, а не полноценный юникод, какой-нибудь Traditional Chinese спокойно может пересекаться с кириллическим диапазоном, и без дополнительного поля с идентификатором языка это будет никак не отловить.
24 янв 13, 11:27    [13820265]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
iap
А что, [а-я] лучше?
Я думал написать LOWER(Field1), но это был бы совсем моветон.
24 янв 13, 11:30    [13820289]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
А что, [а-я] лучше?

Не-не, конечно хуже. Об чём сразу и было предупреждено Ennor Tiegael'ом.
Если ТСу нужен русский алфавит, то я бы тоже ваш вариант выбрал.
24 янв 13, 11:37    [13820350]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
вот немного не допишешь - и тут же будешь неверно истолкован :))
-- решение
-- убедившись, что коды символов в таблице расположены последовательно и без пропусков, можно предложить частное решение для конкретной базы данных:
вопрос о переносимости кода вроде не поднимался:)
24 янв 13, 12:23    [13820673]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
и да, я бы тоже предпочел вариант с явным перечислением всех исключаемых символов
24 янв 13, 12:26    [13820695]     Ответить | Цитировать Сообщить модератору
 Re: выбрать все строки НЕ содержащие символов кириллицы  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Сорри, нагнал - в рамках UCS-2 языковые диапазоны символов не пересекаются, так что кириллица и в Китае останется кириллицей.
Тогда, конечно, все просто.
24 янв 13, 17:37    [13823177]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить