Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / REVERSE или аналог? / 6 сообщений из 6, страница 1 из 1
22.02.2013, 11:59
    #38161973
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REVERSE или аналог?
Здравствуйте! Есть ли функция по перевороту строки
Код: plsql
1.
 REVERSE('стол') = 'лотс' 

.
(Версия СУБД 9.7)?
Просто я не нашёл в хелпе описание таковой функции, но мне кажется должно быть...
P.S. В Oracle,MSSQL,SYBASE, MYSQL есть - должно быть что то и в DB2...

Подскажите плиз!!!
...
Рейтинг: 0 / 0
22.02.2013, 12:20
    #38162017
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REVERSE или аналог?
Опытные разрабочики, может у кого своя есть тогда своя функция, не жмитесь, поделитесь
...
Рейтинг: 0 / 0
22.02.2013, 12:58
    #38162108
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REVERSE или аналог?
Предлагаю свою, если что:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION TOOLS.RESERVE (STR_IN VARCHAR(2000))
  RETURNS VARCHAR(32000)
  LANGUAGE SQL
  BEGIN
        DECLARE i INTEGER;
        DECLARE j INTEGER;
        DECLARE STR_OUT VARCHAR(32000);
        
        SET STR_OUT = '';
        SET STR_IN = LTRIM(RTRIM(STR_IN));
        set i = length(STR_IN);
           WHILE i >= 1  DO
                 SET STR_OUT =  STR_OUT || SUBSTR(STR_IN,i,1);
                 SET i = i -1;
           END WHILE;
           RETURN STR_OUT;
  END
...
Рейтинг: 0 / 0
22.02.2013, 13:03
    #38162119
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REVERSE или аналог?
Функцию конечно надо назвать reverse)) , пятница мозк отказывается арбайтен)).
...
Рейтинг: 0 / 0
22.02.2013, 13:45
    #38162215
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REVERSE или аналог?
medoed,

В UTF-8 базе не будет правильно работать с не-ASCII символами.
В DB2 VARCHAR(N) - это N байт, а не символов.
Т.к. каждый символ кирилицы занимает 2 байта, вы не поместите, например, 'стол' в VARCHAR(4), а только в VARCHAR(8).

LENGTH и SUBSTR работают на основе байтов, поэтому в UTF-8 базе ваша функция будет работать с русскими буквами неправильно.
Используйте вместо них:
LENGTH(STR_IN, CODEUNITS16) и SUBSTRING(STR_IN, i, 1, CODEUNITS16).
...
Рейтинг: 0 / 0
22.02.2013, 14:09
    #38162263
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REVERSE или аналог?
Mark Barinstein,

Спасибо Марк, замечания учел))
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / REVERSE или аналог? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]