Текущее время: Ср, май 14 2025, 06:10

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: select substring in ABAP
СообщениеДобавлено: Чт, июн 02 2005, 09:34 
Гость
Добрый день.

Не подскажете как можно решить такую задачу: есть поле примерно на 15 символов . Мне надо вытащить 6 символов из середины поля в поле selection screen и самое главное сделать выборку из поля таблицы БД и вытащить только эти 6 символов и сопоставить их с переменной назначенной для selection screen. В обычном SQL есть запрос select substring а есть ли что-то подобное в ABAP? И если нет, то что можно сделать в данной ситуации?

Заранее спасибо.
Дмитрий.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 09:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Если SELECT ... WHERE SOMEFIELD LIKE '%substr%' не годится, то можешь поиграться с NATIVE SQL.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 09:55 
Гость
Дело то как раз в том, что с native SQL ничего не выходит. Нет такой команды в ABAP как select substring. И это очень странно.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 09:56 
Модератор
Модератор

Зарегистрирован:
Пт, ноя 12 2004, 11:40
Сообщения: 542
Откуда: Москва
Пол: Мужской
C полями ничего делать в OPEN SQL низя :(
кроме MAX, SUM...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 10:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
2 Slike
Ощущение, что вы путаете OPEN SQL и NATIVE SQL

OPEN:
Code:
SELECT .. FROM ...

ENDSELECT.


NATIVE:
Code:
EXEC SQL.
  select ...
ENDEXEC.


помнится как-то давно пробовал substring в NATIVE - всё было в порядке


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 10:40 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
slike написал(а):
Дело то как раз в том, что с native SQL ничего не выходит. Нет такой команды в ABAP как select substring. И это очень странно.


Native SQL на то и Native, что к АВАРу никакого отношения не имеет.
Попробуй, к примеру, написать и сгенерировать

Code:
EXEC SQL.
  ХАЧУ ВЫБРАТЬ КУЧУ ПОЛЕЙ ИЗ КАКОЙ-НИБУДЬ ТАБЛИЦЫ.
ENDEXEC.


И оно сгенерится. При выполнении, правда, в дамп свалится.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 11:01 
Гость
Спасибо. Буду пытаться. :)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 15:52 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
С Open SQL простой вариант на ум не приходит.
Можно так (если я правильно понял условие):
Code:
PARAMETER a TYPE char255.

DATA: std(6),
      ch6(6),
      ch255(255),
      itab TYPE TABLE OF char255.

START-OF-SELECTION.

  std = a+1(6).

  SELECT changeuser
    FROM t000
    INTO ch255.

    ch6 = ch255+1(6).

    IF ch6 = std.
      APPEND ch255 TO itab.
    ENDIF.

  ENDSELECT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 16:12 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
V® написал:
С Open SQL простой вариант на ум не приходит.
Можно так (если я правильно понял условие):


Тогда уж так:

Code:
PARAMETER a TYPE char255.

DATA: std(8),
          itab TYPE TABLE OF char255.

START-OF-SELECTION.

CONCATENATE '_' a+1(6) '%' INTO std.
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:09 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
Code:
PARAMETER a TYPE char255.

DATA: std(8),
          itab TYPE TABLE OF char255.

START-OF-SELECTION.

CONCATENATE '_' a+1(6) '%' INTO std.
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std.

Согласен, лаконичнее.
Только если брать, скажем с 16го символа, то менее удобно.
А еще в моем случае в имени пользователя (changeuser) часто встречается знак _ и из-за этого like может отрабатывать некорректно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:20 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
V® написал:
Согласен, лаконичнее.


Не только лаконичнее, но быстрее - порядков так на... N.
Конкретное значение N зависит от размеров таблицы :-).

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:37 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
111 написал(а):
Не только лаконичнее, но быстрее - порядков так на... N.
Конкретное значение N зависит от размеров таблицы :-).

Согласен, тоже уважаю SQL :)
и select отличный, но есть исключения...

Исходная строка => a = "i_ivanov",
Выбираем подстроку со 2-го по 3й символ => std = '_i'

После выполнения
Code:
CONCATENATE '_' a+1(2) '%' INTO std. "std = '__i%'
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std.

Получаем набор правильных значений
i_ivanov
d_ignatov
...и неправильных
dmitriev
и т.д.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:42 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
V® написал:
Исходная строка => a = "i_ivanov",
Выбираем подстроку со 2-го по 3й символ => std = '_i'


Эт понятно. Но все равно, мне кажется, лучше уж тогда будет потом пройтись по полученной внутренней таблице и выкосить неправильные записи.
Точнее, сделать
Code:
DELETE ITAB WHERE ...

ИМХО.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 18:06 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
Code:
DELETE ITAB WHERE ...

а можно полный вариант, без троеточия? :wink:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 18:20 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
V® написал:
Code:
DELETE ITAB WHERE ...

а можно полный вариант, без троеточия? :wink:


Да за ради Бога.

Code:
CONCATENATE '_' a+1(2) '%' INTO std. "std = '__i%'
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std. 

DELETE itab WHERE field+1(2) NE a+1(2).


Ну, поле field нужно добавить в itab - да. А что, сложно? :-)

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB