Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
лл
Guest
По Client Statistics предложенный вами алгоритм примерно в два раза медленнее варианта с вложенными заменами.
15 апр 08, 14:35    [5548645]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
лл
По Client Statistics предложенный вами алгоритм примерно в два раза медленнее варианта с вложенными заменами.
А вариант с таблицей на каком месте?
15 апр 08, 14:38    [5548671]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
лл
Guest
iap
лл
По Client Statistics предложенный вами алгоритм примерно в два раза медленнее варианта с вложенными заменами.
А вариант с таблицей на каком месте?

не проверял) подозреваю не сильно изменится...
15 апр 08, 14:44    [5548731]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
iap
лл
По Client Statistics предложенный вами алгоритм примерно в два раза медленнее варианта с вложенными заменами.
А вариант с таблицей на каком месте?
Кстати, небольшая поправка, сокращающая лишние вызовы REPLACE:
CREATE FUNCTION [dbo].[ufn_EnName](@name NVARCHAR(4000))
RETURNS NVARCHAR(4000) AS
BEGIN
 DECLARE @Result NVARCHAR(4000);
 SET @Result=@name;
 SELECT @Result=REPLACE(@Result,Rus,Lat) FROM TransLit WHERE @name LIKE '%'+Rus+'%';
 RETURN @Result;
END;
15 апр 08, 14:48    [5548769]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
лл
Guest
Не стоит забывать, что задача не имеет оптимального решения методами языка SQL. Имхо, нет необходимости в формировании таблицы конвертации символов, тк на входе и выходе у нас лишь по строке.
15 апр 08, 14:55    [5548842]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
mccc
Member [заблокирован]

Откуда: Казань
Сообщений: 7650
KGP
это возможность реализовать специфическую задачу посредством net (например C#)
ps: читайте в Books Online
(ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/denet9/html/c73e628a-f54a-411a-bfe3-6dae519316cc.htm)


у меня эта ссылка не пашет
мой нелр типа (denet9 - sqlgtst9)
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/sqlgtst9/html/....

дайте хоть текст заголовка
15 апр 08, 15:50    [5549415]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
mccc
Member [заблокирован]

Откуда: Казань
Сообщений: 7650
mccc
[quot KGP]это возможность реализовать специфическую задачу посредством net (например C#)
ps: читайте в Books Online
(ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/denet9/html/c73e628a-f54a-411a-bfe3-6dae519316cc.htm)

оказывается
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/denet9/html/c73e628a-f54a-411a-bfe3-6dae519316cc.htm
- (ru) а содержание eng.
15 апр 08, 15:55    [5549465]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
лл
По Client Statistics предложенный вами алгоритм примерно в два раза медленнее варианта с вложенными заменами.
Ну не в два, а полтора. Блин, не так "прочитал" план запроса. Кстати вот ещё вариант в туже степь (чиста для красоты):
CREATE FUNCTION [dbo].[TransLit] (
	 @@String	VarChar(max)
) RETURNS VarChar(max) AS BEGIN
	DECLARE	 @Output	VarChar(max)
		,@Counter	Int
	SELECT	 @Counter	= 1
		,@Output	= ''
	-- Пробежимся по всей строке
	WHILE (@Counter <= DataLength(@@String)) BEGIN
		SELECT	Top(1)
			 @Output	= @Output	+ SubString(ToCase,Shift,ToLen)
			,@Counter	= @Counter	+ FromLen
		FROM	(	SELECT	3,'|ВИЙ|ГИЙ|ДИЙ|НИЙ|СИЙ|ТИЙ|'						,'VY||GY||DY||NY||SY||TY'					,2
		UNION ALL	SELECT	2,'|ЖД|АЙ|ЕЙ|ЁЙ|ИЙ|ИЯ|ОЙх.й|ЫЙ|ЭЙ|ЬЯ|ЬЕ|ЬЁ|ЬА|ЬИ|ЬО|ЬУ|ЬЫ|ЬЭ|ЬЮ|'	,'ZD|AY|EY|EY|IY|IA|OY|UY|YY|EY|IA|YE|YE|IA|YI|YO|YU|YY|YE|YU'	,2
		UNION ALL	SELECT	2,'|ЮЙ|ЯЙ|ЛЮ|КС|'							,'YUYYAYLIUX'							,3
		UNION ALL	SELECT	1,'|Ж|Х|Ц|Ч|Ш|Я|Ю|'							,'ZHKHTSCHSHYAYU'						,2
		UNION ALL	SELECT	1,'|А|Б|В|Г|Д|Е|Ё|З|И|Й|К|Л|М|Н|О|П|Р|С|Т|У|Ф|Ы|Э|Ъ|Ь|'			,'A|B|V|G|D|E|E|Z|I|Y|K|L|M|N|O|P|R|S|T|U|F|Y|E'		,1
			) C(FromLen,FromCase,ToCase,ToLen) CROSS APPLY (SELECT PatIndex('%|' + SubString(@@String,@Counter,FromLen) + '|%',FromCase)) S(Shift)
		WHERE	Shift > 0
		ORDER BY FromLen DESC
		-- Для остального копируем
		SELECT	 @Output	= @Output	+ SubString(@@String,@Counter,1)
			,@Counter	= @Counter	+ 1
		WHERE	@@RowCount = 0
	END
	RETURN	@Output
END
GO
Ну это не важно, сё равно пошаговый вариант тормознутый.
iap
А вариант с таблицей на каком месте?
На первом, и врятли предложат лучше. И CLR думаю не будет (особо) быстрее.
CREATE FUNCTION [dbo].[TransLit] (
	@@String	VarChar(max)
) RETURNS VarChar(max) AS BEGIN
	DECLARE	@Result	VarChar(max)
	SET	@Result	= @@String
	SELECT	@Result	= Replace(@Result,Rus,Lat)
	FROM	(	SELECT 'А','A'
	UNION ALL	SELECT 'Б','B'
	UNION ALL	SELECT 'В','V'
	UNION ALL	SELECT 'Г','G'
	UNION ALL	SELECT 'Д','D'
	UNION ALL	SELECT 'Е','E'
	UNION ALL	SELECT 'Ё','YO'
	UNION ALL	SELECT 'Ж','ZH'
	UNION ALL	SELECT 'З','Z'
	UNION ALL	SELECT 'И','I'
	UNION ALL	SELECT 'Й','Y'
	UNION ALL	SELECT 'К','K'
	UNION ALL	SELECT 'Л','L'
	UNION ALL	SELECT 'М','M'
	UNION ALL	SELECT 'Н','N'
	UNION ALL	SELECT 'О','O'
	UNION ALL	SELECT 'П','P'
	UNION ALL	SELECT 'Р','R'
	UNION ALL	SELECT 'С','S'
	UNION ALL	SELECT 'Т','T'
	UNION ALL	SELECT 'У','U'
	UNION ALL	SELECT 'Ф','F'
	UNION ALL	SELECT 'Х','H'
	UNION ALL	SELECT 'Ц','C'
	UNION ALL	SELECT 'Ч','CH'
	UNION ALL	SELECT 'Ш','SH'
	UNION ALL	SELECT 'Щ','SH'
	UNION ALL	SELECT 'Ъ',''''
	UNION ALL	SELECT 'Ы','Y'
	UNION ALL	SELECT 'Ь',''''
	UNION ALL	SELECT 'Э','E'
	UNION ALL	SELECT 'Ю','YU'
	UNION ALL	SELECT 'Я','YA')T(Rus,Lat)
	WHERE	@@String LIKE '%'+Rus+'%'
	RETURN	@Result
END
GO
Ну, блин, а как все таки с Case Sensitive??? Хоть куды копать?
Кстати, есть гост стандарт (табличный самый близкий), так что всякие сложные манипуляции "официально" не катят.
15 апр 08, 23:29    [5551667]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
лл
Guest
Да лана на первом) Цифры -- в студию!)
Тока сравнивать надо с одинаковыми набороми символов конвертации, а не как у тебя -- только заглавные буквы. =)
16 апр 08, 13:14    [5554279]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
лл
Да лана на первом) Цифры -- в студию!)
Как помню, примерно так:
500
3300
4900
:)
Конечно же, варьировало от размера и содержания текста. От типов данных и порядка case/order ...

лл
Тока сравнивать надо с одинаковыми ...
Чистая копия, тока названия функций отличались.
лл
... набороми символов конвертации, а не как у тебя только заглавные буквы. =)
Не понял, во всех случаях лажа с case sensitive. А выкрутасы с разными размерами (1 на 2, 3 на 2, 2 на 1, 1 на 2, ...) - так блин подходы, то разные. Как их моно "выровнять"? Поэтому и сравнение коров с тыблоками. А ещё иногда надо юзать "офицальный" таблично-простой вариант, так что выбор алгоридма более однознычный ...
16 апр 08, 19:25    [5557491]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
а чего там изобретать - согласно ISO9

www.lepsik.com/db/ipsesp.zip

char szcyr[] =   {'а', 'б','в','г','д','е','ё','ж','з',  'и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч', 'ш', 'щ',  'ъ', 'ы','ь', 'э', 'ю','я', 
                  'А', 'Б','В','Г','Д','Е','Ё','Ж','З',  'И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч', 'Ш', 'Щ',  'Ъ', 'Ы','Ь', 'Э', 'Ю','Я', 0 };
char szlatA[] =  {'a', 'b','v','g','d','e','e',' ','z',  'i','j','k','l','m','n','o','p','r','s','t','u','f','x','c','č', 'š', 'ŝ',  '"', 'y', '\'', 'è','û','â',
                  'A', 'B','V','G','D','E','E',' ','Z',  'I','j','K','L','M','N','O','P','R','S','T','U','F','X','C','Č' ,'Š', 'Ŝ',  '"', 'Y', '\'', 'È','Û','Â', 0 };
char *szlatB[] = {"a", "b","v","g","d","e","yo","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","shh","''","y`","`", "e`","yu", "ya",
                  "A", "B","V","G","D","E","YO","ZH","Z","I","J","k","L","M","N","O","P","R","S","T","U","F","X","C","CH","SH","SHH","''","Y`","`", "E`","YU", "YA", 0 };
//-------------------------------------------------------------------------------------------------------------------------------
RETCODE __declspec(dllexport) xp_ISO9(SRV_PROC* srvproc)
{
    if( srv_rpcparams(srvproc) < 1 ) 
    {
        srv_sendmsg(srvproc, SRV_MSG_ERROR, GETTABLE_ERROR, SRV_INFO, (DBTINYINT) 0, NULL, 0, 0, 
                "Wrong number of parameters - must be 1 : query nvarchar IN", SRV_NULLTERM);
        srv_senddone(srvproc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0, 0);
        return(-1);
    }
    setlocale(LC_ALL, "Russian_Russia.1251");

    // default paraminfo values
    BYTE	pbType = 0;
    ULONG	pcbMaxLen = 0L;
    ULONG	pcbActualLen = 0L;
    BOOL	pfNull = TRUE;
    int nRowsFetched = 0;
    try
    {
        srv_paraminfo( srvproc, 1, &pbType, &pcbMaxLen, &pcbActualLen, NULL, &pfNull ); 
        // read IN data
		char *wzInput = new char[2*pcbActualLen+1];
		char *wzOut = new char[3*pcbActualLen+1];
        memset( wzInput, 0, pcbActualLen );
        memset( wzOut, 0, pcbActualLen );

        memcpy( wzInput, srv_paramdata(srvproc, 1), pcbActualLen+2 );
        wzInput[pcbActualLen] = L'\0';
        size_t ln = strlen(wzInput);

        for( size_t i =0; i < ln; i++ )
        {
            int indx = -1;
            char np = wzInput[i];
            char *ptr = NULL;

            for( size_t j = 0; j < _countof(szcyr); j++ )
            {
                 if( np == szcyr[j] )
                 {
                     indx = j;
                     break;
                 }
            }
            wzInput[i] = (indx < 0 ? ' ' : szlatA[indx]); 

            strcat( wzOut, indx < 0 ? " " : szlatB[indx] );
        }

        srv_describe(srvproc, 1, (DBCHAR *)"A", SRV_NULLTERM, SRVVARCHAR, pcbActualLen, SRVVARCHAR, pcbActualLen, NULL);
        srv_describe(srvproc, 2, (DBCHAR *)"B", SRV_NULLTERM, SRVVARCHAR, pcbActualLen, SRVVARCHAR, pcbActualLen, NULL);

        srv_setcollen (srvproc, 1, pcbActualLen);   srv_setcoldata (srvproc, 1, (void *)wzInput );
        srv_setcollen (srvproc, 2, strlen(wzOut)+1);   srv_setcoldata (srvproc, 2, (void *)wzOut );

        if( srv_sendrow (srvproc) == SUCCEED )
            {
		            nRowsFetched++;                        // Go to the next row. 
            } 
        if( nRowsFetched > 0 )
        {
            srv_senddone (srvproc, SRV_DONE_COUNT | SRV_DONE_MORE, (DBUSMALLINT) 0, nRowsFetched);
        }
        else 
        {
            srv_senddone (srvproc, SRV_DONE_MORE, (DBUSMALLINT) 0, (DBINT) 0);
        }
        delete [] wzInput;
        delete [] wzOut;

        return (XP_NOERROR);
    }
    catch(...)
    {
        srv_sendmsg(srvproc, SRV_MSG_ERROR, GETTABLE_ERROR, SRV_INFO, (DBTINYINT) 0, NULL, 0, 0, "Unknown error in xp_list_words", SRV_NULLTERM);
        srv_senddone(srvproc, (SRV_DONE_ERROR | SRV_DONE_MORE), 0, 0);
        return -1;
    }
    return -1;
}

https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=275636&hl=%ea%ee%ed%f1%f2%f0%f3%ea%f2%ee%f0+%ef%ee%e8%f1%ea%ee%e2%e8%ea%e0#2488849
17 апр 08, 17:17    [5562822]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
собственно пример

exec master..xp_ISO9 N'пеРевед яХон Дарагой'

тип А тип B
peReved Xon Daragoj peReved yaXon Daragoj
17 апр 08, 17:19    [5562839]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Mnior
Ну, блин, а как все таки с Case Sensitive???
Пока самому не понадобилось, нихто не подсказал. Черновой (есть лишнее):
CREATE FUNCTION [dbo].[TransLit] (
	@@String	VarChar(max)
) RETURNS VarChar(max) AS BEGIN	-- SELECT dbo.TransLit('пеРевед яХон Дарагой')
	DECLARE	@TransTable	TABLE(
		 Rus	Char	PRIMARY KEY
		,Lat	VarChar(2)
	)INSERT	@TransTable	SELECT 'А','A'
		UNION ALL	SELECT 'Б','B'
		UNION ALL	SELECT 'В','V'
		UNION ALL	SELECT 'Г','G'
		UNION ALL	SELECT 'Д','D'
		UNION ALL	SELECT 'Е','E'
		UNION ALL	SELECT 'Ё','YO'
		UNION ALL	SELECT 'Ж','ZH'
		UNION ALL	SELECT 'З','Z'
		UNION ALL	SELECT 'И','I'
		UNION ALL	SELECT 'Й','Y'
		UNION ALL	SELECT 'К','K'
		UNION ALL	SELECT 'Л','L'
		UNION ALL	SELECT 'М','M'
		UNION ALL	SELECT 'Н','N'
		UNION ALL	SELECT 'О','O'
		UNION ALL	SELECT 'П','P'
		UNION ALL	SELECT 'Р','R'
		UNION ALL	SELECT 'С','S'
		UNION ALL	SELECT 'Т','T'
		UNION ALL	SELECT 'У','U'
		UNION ALL	SELECT 'Ф','F'
		UNION ALL	SELECT 'Х','H'
		UNION ALL	SELECT 'Ц','C'
		UNION ALL	SELECT 'Ч','CH'
		UNION ALL	SELECT 'Ш','SH'
		UNION ALL	SELECT 'Щ','SH'
		UNION ALL	SELECT 'Ъ',''''
		UNION ALL	SELECT 'Ы','Y'
		UNION ALL	SELECT 'Ь',''''
		UNION ALL	SELECT 'Э','E'
		UNION ALL	SELECT 'Ю','YU'
		UNION ALL	SELECT 'Я','YA'

	DECLARE	@Result	VarChar(max)
	SET	@Result	= @@String
	SELECT	@Result	= Replace(@Result,Upper(Rus) COLLATE Cyrillic_General_CS_AS,Upper(Lat)) FROM @TransTable WHERE	@@String LIKE '%' + Rus + '%'
	SELECT	@Result	= Replace(@Result,Lower(Rus) COLLATE Cyrillic_General_CI_AS,Lower(Lat)) FROM @TransTable WHERE	@@String LIKE '%' + Rus + '%'
	RETURN	@Result
END
GO
23 май 08, 13:12    [5706212]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
sunway
Member

Откуда:
Сообщений: 1
Mnior, мне твоя функция понравилась,
А нет уже такой же готовой для C#?

Спасибо,
Дмитрий, svarga.biz
14 дек 08, 21:40    [6569136]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 782
Lepsik
'\''

Один апостроф лишний, нет?
14 дек 08, 23:43    [6569360]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
flexgen
Lepsik
'\''

Один апостроф лишний, нет?


нет не лишний -это для тупого перевода регистров
14 дек 08, 23:54    [6569386]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
snikolay
Member

Откуда: Москва
Сообщений: 3
-- транслитерация по ГОСТ-а 7.79-2000

declare @str varchar(4000), @str_lat varchar(8000)
set @str = 'Иван Шмелёв родился в городе Шуйске. Он по утрам пьёт кисель.'

declare @rus varchar(100), @lat1 varchar(100), @lat2 varchar(100), @lat3 varchar(100)
set @rus =  'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
set @lat1 = 'abvgdejzzijklmnoprstufkccss"y''ejj' 
set @lat2 = '      oh  j           h hhh   hua'
set @lat3 = '                          h      '

declare @i int, @pos int, @ch varchar(2)
set @i = 1
set @str_lat = ''

while @i <= len(@str)
begin
	set @ch = substring(@str, @i, 1)
	set @pos = charindex(@ch, @rus)

	if @pos > 0
	begin
		if ascii(upper(@ch)) = ascii(@ch)
			set @str_lat = @str_lat + upper(substring(@lat1, @pos, 1)) + rtrim(substring(@lat2, @pos, 1)) + rtrim(substring(@lat3, @pos, 1))
		else
			set @str_lat = @str_lat + substring(@lat1, @pos, 1) + rtrim(substring(@lat2, @pos, 1)) + rtrim(substring(@lat3, @pos, 1))
	end
	else
		set @str_lat = @str_lat + @ch
	set @i = @i + 1
end

select @str_lat

Ivan Shmeljov rodilsja v gorode Shujjske. On po utram p'jot kisel'.
23 апр 09, 16:04    [7105706]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Инди
Guest
snikolay
-- транслитерация по ГОСТ-а 7.79-2000


Спасибо, просто и понятно.
17 сен 09, 20:16    [7675936]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
gjkmpjdfntkm
Member

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

Коллеги, такой вопрос, хочу узнать насколько решаема следующая задача

Имеются имена:

Иванов - Ivanov,Ivanoff

Станкович - Stankovich,Stankovych

Милевский - Milevski,Milevskii,Milevskiy


Т.е. я точно знаю, что на русском имя человека правильное, а вот каким образом имя записано на транслите - тут могут быть вопросы.

Задача следующая, по имени транслитерации отображать кириллицу и наоборот, но поиск должен предпологать, что
в - может быть off ,ov
ий - может быть i , iy , ii ,ij
я - может быть ia , ya , ja
ю - может быть iu , yu , ju ,u ,

и т.д.

Насколько возможно реализовать подобное решение?
17 мар 10, 11:05    [8490487]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Lok_II
Member

Откуда:
Сообщений: 20
Небольшая доработка. У меня не транслитирировал верхний регистр. Видимо на CharIndex() влияет collation. Чтобы избежать, привел к нижнему регистру
CREATE FUNCTION [dbo].[Translit] (@str varchar(4000))  
RETURNS varchar(4000)  AS  
BEGIN 
 	

	-- транслитерация по ГОСТ-а 7.79-2000
	
	declare @str_lat varchar(8000)
	declare @rus varchar(100), @lat1 varchar(100), @lat2 varchar(100), @lat3 varchar(100)
	set @rus =  'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
	set @lat1 = 'abvgdejzzijklmnoprstufkccss"y''ejj' 
	set @lat2 = '      oh  j           h hhh   hua'
	set @lat3 = '                          h      '
	
	declare @i int, @pos int, @ch varchar(2)
	set @i = 1
	set @str_lat = ''
	
	while @i <= len(@str)
	begin
		set @ch = substring(@str, @i, 1)
		set @pos = charindex(lower(@ch), @rus)
	
		if @pos > 0
		begin
			if ascii(upper(@ch)) = ascii(@ch)
				set @str_lat = @str_lat + upper(substring(@lat1, @pos, 1)) + rtrim(substring(@lat2, @pos, 1)) + rtrim(substring(@lat3, @pos, 1))
			else
				set @str_lat = @str_lat + substring(@lat1, @pos, 1) + rtrim(substring(@lat2, @pos, 1)) + rtrim(substring(@lat3, @pos, 1))
		end
		else
			set @str_lat = @str_lat + @ch
		set @i = @i + 1
	end
	
	return @str_lat
END
23 июл 10, 12:03    [9149208]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Lok_II, ласапед с квадратными колёсами? Для дезориентации противника?
23 июл 10, 21:26    [9152623]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
В любом случае интересно увидеть хотя бы ссылку на "оффицияльный" стандарт транслита.

2Аффтар,

А вы ничего не напутали с твердым знаком? По ГОСТу для аналога "Ъ" полагается использовать два обратных апострофа. Хотя может что с кодировками намутилось...
23 июл 10, 21:41    [9152644]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Павел Кохольников
Member

Откуда: Рязань
Сообщений: 1
Да нет, все правильно.
24 июл 10, 07:18    [9153152]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Каму-та скорость работы не понравилась.
+ да, да вы правильно подумали
CREATE FUNCTION [dbo].[TransLit] (
	@@String	VarChar(max)
) RETURNS TABLE AS RETURN	-- SELECT * FROM dbo.TransLit('пеРевед яХон Дарагой')
SELECT	Replace (Replace (Replace (Replace (Replace (Replace (Replace  (Replace  (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace  (Replace  (Replace  (Replace  (Replace (Replace  (Replace (Replace  (Replace  (
	Replace (Replace (Replace (Replace (Replace (Replace (Replace  (Replace  (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace (Replace  (Replace  (Replace  (Replace  (Replace (Replace  (Replace (Replace  (Replace  (
	@@String COLLATE Cyrillic_General_CS_AS
	,'А','A'),'Б','B'),'В','V'),'Г','G'),'Д','D'),'Е','E'),'Ё','YO'),'Ж','ZH'),'З','Z'),'И','I'),'Й','Y'),'К','K'),'Л','L'),'М','M'),'Н','N'),'О','O'),'П','P'),'Р','R'),'С','S'),'Т','T'),'У','U'),'Ф','F'),'Х','H'),'Ц','C'),'Ч','CH'),'Ш','SH'),'Щ','SH'),'Ъ',''''),'Ы','Y'),'Ь',''''),'Э','E'),'Ю','YU'),'Я','YA')
	,'а','a'),'б','b'),'в','v'),'г','g'),'д','d'),'е','e'),'ё','yo'),'ж','zh'),'з','z'),'и','i'),'й','y'),'к','k'),'л','l'),'м','m'),'н','n'),'о','o'),'п','p'),'р','r'),'с','s'),'т','t'),'у','u'),'ф','f'),'х','h'),'ц','c'),'ч','ch'),'ш','sh'),'щ','sh'),'ъ',''''),'ы','y'),'ь',''''),'э','e'),'ю','yu'),'я','ya')
	AS TransLit
GO
8 фев 11, 14:43    [10202368]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Есть ли у кого готовая функция перевода (транслит) с руского на английский  [new]
yanik
Member

Откуда:
Сообщений: 51
ПРобовал различные версии функции, выложенные в данной теме.
Но почему-то всегда результатом выполнения у меня получается что-то вроде:

VYVYVY VYA (VYVYVYVY VYVY 150Kb) или
АААААА AAA AAAAAAAA AAA 150Kb)

В чем может быть проблема
9 июн 15, 12:05    [17748812]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить