Поля экстента / массива в Progress OpenEdge также показаны как разделенные точкой с запятой при просмотре из SQL92, если это поле экстента / массива, то вы можете просто используйте:
addr[1]
Если это не так, вы можете использовать instr
, , но , вам нужно будет использовать правильный синтаксис . Первый параметр - это строка, второй - то, что вы хотите найти в ней. Обратите внимание на дополнительные + ';'
ниже, чтобы строка всегда заканчивалась точкой с запятой:
substr( addr, 1, instr( addr + ';', ';', 1 ) - 1 )
Если вы хотите не только первое, но второе или третье, то Это немного сложнее:
select
addr,
substring( addr, 1, instr( addr + ';', ';', 1, 1 ) ) as '#1' ,
case
when instr( addr, ';', 1, 1 ) > 0 then
substring( addr, instr( addr, ';', 1, 1 ), instr( addr + ';', ';', 1, 2 ) - instr( addr, ';', 1, 1 ) )
else
''
end as '#2' ,
case
when instr( addr, ';', 1, 2 ) > 0 then
substring( addr, instr( addr, ';', 1, 2 ), instr( addr + ';', ';', 1, 3 ) - instr( addr, ';', 1, 2 ) )
else
''
end as '#3'
from ...
Все вышеперечисленное было протестировано на PDSOE (Eclipse) с использованием драйвера JDB C. Предполагая, что OPENQUERY ничего не портит по пути, у вас все будет хорошо.