2015-05-14 2 views
1

Я новичок кодировщик, поэтому, пожалуйста, голые со мнойNetezza SQL функция сканирования

Вопрос в том, у меня есть таблица со столбцом идентификатором, - отделено (пример значения столбца может быть: TOM-XYZ12356 -DIM34345-TE123456 или TOM-XYZR3455667AB-RXB75855-RYB434553)

Мой главный фокус, чтобы попытаться извлечь, что 2-ая часть идентификатора. В приведенных выше примерах это будет (XYZ12356 и XYZR3455667AB). Я пытался что-то простое ниже, но получаю сообщение об ошибке «Атрибут„-“не найден»

SELECT substr(identifier,1,Charindex("-",identifier) -1) 
FROM TableA 

Возможно, я не указав точку начала правильно или, может быть, я не использую правильную функцию. Могу ли я использовать некоторую функцию, отличную от Charindex?

Любая помощь будет принята с благодарностью

+1

Возможно, вам нужны одинарные кавычки вместо double: 'SELECT substr (идентификатор, 1, Charindex ('-', identifier) ​​-1)' – dnoeth

+0

Привет, спасибо за ваш быстрый ответ, я попробовал это сейчас, после того, как вы предложили это и теперь я получаю ошибку «ERROR [42S02] ОШИБКА: Функция« CHARINDEX (UNKNOWN, VARCHAR) »не существует» – vbala2014

+0

Я также попытался использовать функцию Position, и я получаю ту же ошибку – vbala2014

ответ

1

Вы можете использовать SUBSTR и Instr, чтобы получить результаты, которые вы хотите.

select * from tableA; 
       COL1 
-------------------------------- 
TOM-XYZ12356-DIM34345-TE123456 
(1 row) 

SUBSTR работает, как и следовало ожидать (хотя, кажется, ваши параметры выходят из строя), и вы можете использовать Instr, чтобы обеспечить стартовый символ после первого «-», а затем вычислить длину SUBSTR путем вычитания положение первого «-» с позиции второго «-».

SELECT SUBSTR(col1, instr(col1,'-',1,1)+1 , instr(col1,'-',1,2) - instr(col1,'-',1,1) -1) 
FROM tableA; 

    SUBSTR 
---------- 
XYZ12356 
(1 row) 

Проверьте синтаксис SUBSTR and INSTR here.

+0

Спасибо Скотту, это сработало для меня отлично. Я перейду к проверке моих результатов с полной строкой, чтобы убедиться, так как в некоторых случаях вторая часть идентификатора может быть длиннее или короче, но при извлечении первой десятки она выглядит хорошо. Еще раз спасибо за это, я дам вашему ответу зеленый чек и +1 – vbala2014

0

Если то, что вы хотите, чтобы выбрать только вторую часть идентификатора будет работать?

select substr(('TOM - XYZ12356 - DIM34345 - TE123456'), 6, 9) 

В результате только вторая часть: «XYZ12356»

+0

Эй Уриэль, к сожалению, вторая часть менялась по длине , поэтому я не могу указать 9 как фиксированное #, это может быть 11 символов в длину, и это может быть 14 символов в некоторых других случаях. Спасибо за предложение, хотя – vbala2014

Смежные вопросы