Мне нужно выбрать какую-нибудь строку из строки, которая варьируется по длине.Конечным результатом является выбор номера идентификатора, заключенного в скобки, из строки.
Пример данных:
Jones (4)
Smith (Deceased) (100)
Результат из приведенного выше примера долженбыть:
4
100
В идеале я хочу запрос, который найдет начальную позицию последней открытой скобки и заберет данные с этой точки и далее, потому что номер идентификатора, содержащийся в скобках, всегда находится наend.
К сожалению, REVERSE
, CHARINDEX
и PATINDEX
недоступны в OpenEdge
функциях SQL, поэтому я не могу их использовать.
INSTR(contact_data,'(',1,2)
дает мне начальную точку, но требует, чтобы я предоставил n-е вхождение - это переменная, потому что некоторые данные содержат 1 скобку, а некоторые содержат больше.
Я пытался ввести переменную в вхождения, но это ошибки - см. ниже и, пожалуйста,помогите, если можете!
SELECT * FROM OPENQUERY(PROCLAIM,'
SELECT a.contact_data,
INSTR(a.contact_data,''('',1,a.bracket_occurrences) AS searching_for_start_point, SUBSTRING(a.contact_data,LOCATE(''('',a.contact_data,1)+1,LENGTH(a.contact_data)-LOCATE(''('',a.contact_data,1)-1) AS contact_id
FROM(
SELECT contact_data,
CAST(LENGTH(contact_data) - LENGTH(REPLACE(contact_data,''('','''')) AS INT) AS bracket_occurrences
FROM PUB.contacts
) AS a
')
К сожалению, у меня есть доступ только к очень ограниченному набору команд SQL, так как я использую Progress
OpenEdge
.
Ниже приведен списоккоманды / функции SQLs доступно для меня:
ABS, ACOS, ADD_MONTHS, ASCII, ASIN, ATAN, ATAN2, AVG, CASE, CAST,
CDC_get_changed_columns, CDC_is_column_changed, CEILING, CHAR, CHR,
COALESCE, CONCAT, CONVERT (ODBC compatible), CONVERT (Progress extension),
COS, COUNT, CURDATE, CURTIME, CURRVAL, DATABASE, DAYNAME, DAYOFMONTH,
DAYOFWEEK, DAYOFYEAR, DB_NAME, DECODE, DEGREES, EXP, FLOOR, GREATEST,
HOUR, IFNULL, INITCAP, INSERT, INSTR, LAST_DAY, LCASE, LEAST, LEFT,
LENGTH, LOCATE, LOG10, LOWER, LPAD, LTRIM, MAX, MIN, MINUTE, MOD,
MONTH, MONTHNAME, MONTHS_BETWEEN, NEXT_DAY, NEXTVAL, NOW, NULLIF, NVL,
PI, POWER, PREFIX, PRO_ARR_DESCAPE function, PRO_ARR_ESCAPE function,
PRO_ELEMENT function, QUARTER, RADIANS, RAND, REPEAT, REPLACE, RIGHT,
ROUND, ROWID, RPAD, RTRIM, SECOND, SIGN, SIN, SQRT, SUBSTR, SUBSTRING
(ODBC compatible), SUFFIX, SUM, SYSDATE, SYSTIME, SYSTIMESTAMP, TAN,
TO_CHAR, TO_DATE, TO_NUMBER, TO_TIME, TO_TIMESTAMP, TRANSLATE, UCASE,
UPPER, USER, WEEK, YEAR