Я пытаюсь извлечь первые десять цифр телефонного номера, заканчивающиеся 10-значным (или менее) номером.Мне нужно использовать белый, а не черный список из-за использования специальных символов.например, "á (123) 555-4567 Toll Free: á (891) 0" должно стать 1235554567.
Я пытаюсь использовать https://stackoverflow.com/a/37685384.
Однако, когда я пытаюсь использоватьthis:
TRANSLATE(SFCONTACT.PHONE,'',TRANSLATE(SFCONTACT.PHONE,'','1234567890',''),'') as clean
Я получаю
Сообщение: [SQL0171] Аргумент 04 функции TRANSLATE недействителен.
В одном из комментариев сказано, чтоиспользование пробелов вместо пустых строк удалило это.Однако для меня попытка:
TRANSLATE(SFCONTACT.PHONE,' ',TRANSLATE(SFCONTACT.PHONE,' ','1234567890',' '),' ') as clean
дает:
Сообщение: [SQL0171] Аргумент 03 функции TRANSLATE недействителен.
Какя могу сделать это?
Запуск AS400 DB2, IBM версия V7R1M0
EDIT (Не уверен, должен ли это быть отдельный Вопрос или нет)
Я попробовал это, как предложено:
SUBSTR(REGEXP_REPLACE(PHONE, '[\D]', ''),1,10) AS MAINPHONE,
И сначала это, казалось, сработало;Мне удалось создать представление, BBICNTMIG
Однако, когда я пытаюсь вставить в таблицу, используя это представление:
INSERT INTO AMMLIBC.BBICONTACT
(COMPANY,CUSNO,SHIPTO,HONORIFICFK,FIRSTNAME,LASTNAME,EMAIL,MAINPHONE,TYPEFK,PROSPECTFK,CREATEDBY,CREATEDAT)
SELECT COMPANY,CUSNO,SHIPTO,HONORIFICFK,FIRSTNAME,LASTNAME,EMAIL,MAINPHONE,TYPEFK,PROSPECTFK,CREATEDBY,CREATEDAT
FROM AMMLIBC.BBICNTMIG
это дает:
Сообщение: [SQL0420] Символ в аргументе CAST недопустим.Причина,,,,: Символ в аргументе для функции CAST был неверным.Восстановление,,: Измените тип данных результата на тот, который распознает символы в аргументе CAST, или измените аргумент, чтобы он содержал допустимое представление значения для типа данных результата.Повторите запрос еще раз.
Если я удаляю телефонные номера из вставки (взяв вместо этого значение по умолчанию, равное null), INSERT завершается успешно, поэтому я знаю, что это номер телефона, вызывающий это.
Тип столбца в таблице назначения - ЧИСЛО (10,0).Я попытался использовать это, но без изменений:
CAST(SUBSTR(REGEXP_REPLACE(PHONE, '[\D]', ''),1,10) AS NUMERIC(10,0)) AS MAINPHONE,
Дополнительная информация:
Я пробовал приводить к типу char перед приведением к числовому.Без изменений.
Я попытался добавить предложение where (оба «mainphone is null» и «mainphone not null» делают это), и сообщение об ошибке меняется на:
Сообщение:[SQL0802] Ошибка преобразования или отображения данных.Причина,,,,: Произошла ошибка типа 6.[...] 6 - Недопустимые числовые данные.