Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как отфильтровать символы доступные для KOI8-R  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
Всем привет!
Есть сервер на котором крутиться PostgreSQL. Через линк. сервер обновляются данные.
При вставке в PostgreSQL недопустимых для KOI8-R символов (например №) генерится ошибка и данные не обновляются.
Сейчас проблема решается "в лоб", после ошибки находится символ и делается тупо реплейс :(

Подскажите, как качественно отфильтровать WIN 1251?
22 июн 09, 10:52    [7326687]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33363
Блог
так попробуйте
[проблемное поле] like [шаблон по поиску]
после того как найдете - замените чем-нибудь их или удалите
22 июн 09, 11:18    [7326863]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
да вот с [шаблон по поиску] и вопрос...

и я думаю, что лучше не удалять то что нельзя, а оставить то что можно...
вот только как это сделать красиво..?
22 июн 09, 11:30    [7327005]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
dima.dp.ua
Member

Откуда:
Сообщений: 42
Можно попробовать так

INSERT INTO OPENQUERY(Postgre_Link, 'SELECT PostgreTable.UserField')
SELECT REPLACE(REPLACE(REPLACE(MSTable.UserField, '№', ''), 'еще один недопустимый символ', ''), 'и еще один недопустимый символ','')...
22 июн 09, 12:49    [7327666]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Думаю, вам будет проще всего написать CLR-функцию, в которой применить System.Text.Encoder.
22 июн 09, 12:57    [7327716]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
Да, именно так у меня и работает сейчас
у меня нет полного набора недопустимых символов, а у пользователей есть весь набор символов :((
22 июн 09, 12:57    [7327717]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
GSerg
Думаю, вам будет проще всего написать CLR-функцию, в которой применить System.Text.Encoder.

Можно поподробнее, что такое CLR-функция?
Синхронизация данных идёт напрямую база-база.
22 июн 09, 13:08    [7327805]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
vov@
Можно поподробнее, что такое CLR-функция?

http://msdn.microsoft.com/ru-ru/library/ms189876.aspx

vov@
Синхронизация данных идёт напрямую база-база.

Ну и будет у вас
INSERT INTO OPENQUERY(Postgre_Link, 'SELECT PostgreTable.UserField')
SELECT dbo.EncodeKOI8(MSTable.UserField)
22 июн 09, 13:15    [7327865]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
интересно...
а это работает под MSSQL 2000?
22 июн 09, 13:32    [7328011]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Конечно же нет.
Для этого и предлагается всем создающим топики указывать select @@version.

Можете написать расширенную хранимку-перекодировщик тогда. На C++. С использованием виндовых функций WideCharToMultibyte и MultibyteToWideChar.

Ну или вот список кодов Unicode, которые представимы в Koi-8.
22 июн 09, 13:39    [7328077]     Ответить | Цитировать Сообщить модератору
 Re: Как отфильтровать символы доступные для KOI8-R  [new]
vov@
Member

Откуда: Днепропетровск
Сообщений: 110
Нашёл решение, может кому-то пригодится...
путём нехитрых манипуляций нашел 55 символов, которых нет в KOI8-R

†­Љљ‡Џџ›№˜‹¶Ўў„µ”Јј“Ћћ®Іі‚ЃѓЇї’Ѕѕ‘§¤€™»‰«ҐґЄє±—…ЂђЌќ–Њњ

ну и функция

Create Function fnValidWinToKoi (@str varchar(8000))
Returns varchar (8000)
AS
Begin

declare @ind int
set @ind = PATINDEX('%[†­Љљ‡Џџ›№˜‹¶Ўў„µ”Јј“Ћћ®Іі‚ЃѓЇї’Ѕѕ‘§¤€™»‰«ҐґЄє±—…ЂђЌќ–Њњ]%' , @str )

while @ind > 0
begin
set @str = left(@str,@ind - 1) + substring(@str,@ind + 1,8000)
set @ind = PATINDEX('%[†­Љљ‡Џџ›№˜‹¶Ўў„µ”Јј“Ћћ®Іі‚ЃѓЇї’Ѕѕ‘§¤€™»‰«ҐґЄє±—…ЂђЌќ–Њњ]%' , @str )
end

Return @Str
End
22 июн 09, 16:15    [7329428]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить