Как убрать пробел между знаком минус и числом в информатике

у меня есть проблема, когда есть поле суммы, которое имеет такие данные, как (- 98765,00), минус {пробелы] {числа}?, мне нужно удалить пробел между минусом и числом и получить как (-98765,00), как мне это сделать в преобразовании выражения.

тип данных поля десятичный (8,2).

Спасибо, Киран


person kiran    schedule 20.09.2016    source источник
comment
Привет всем, я пытался использовать функцию reg_extract, но она возвращала значение null   -  person kiran    schedule 20.09.2016


Ответы (3)


output_port: TO_DECIMAL(REPLACECHR(FALSE,input_port,' ',''))

REPLACECHR заменяет пробелы пустыми символами, фактически удаляя их. Первый аргумент может быть ИСТИНА/ЛОЖЬ, чтобы указать регистр или нет, но в данном случае это не важно.

person Samik    schedule 20.09.2016
comment
Привет, я попробовал обе логики и не сработал, вернув '0' .. :( - person kiran; 20.09.2016
comment
значение поля примерно такое (- 553224,61), когда я использую вышеуказанную логику, оно возвращает 0 - person kiran; 20.09.2016
comment
Вы имеете в виду скобки и запятую в конце? - person Samik; 20.09.2016
comment
нет, а просто несколько пробелов между (например, 3 пробела) знаком минус и числом. Но некоторые из приведенных выше логик не работают. ввод десятичный, и я преобразовал в строку и использовал приведенную выше логику outpout_port со строкой типа данных. - person kiran; 20.09.2016
comment
Вы должны читать данные как строку, а не десятичную. Измените определение источника, чтобы изменить тип данных. Вероятно, он считывает значение как 0 из самого источника из-за пробелов. - person Samik; 21.09.2016
comment
Кроме того, вы можете запустить сопоставление в отладчике, чтобы проверить, где оно преобразуется в 0, из источника или в выражении. - person Samik; 21.09.2016


Вы можете использовать функцию REG_REPLACE для замены пробела
Для этого вам необходимо выполнить следующие шаги:

* Создайте два переменных порта
* REG_REPLACE - для функции требуется строковый столбец, поэтому вам нужно преобразовать десятичный столбец в строковый столбец с помощью функции TO_CHAR
Первая переменная порта (строка) - TO_CHAR(column_name)
* В предыдущем порте данные были преобразованы в строку, теперь преобразуйте их снова в десятичный формат и примените < strong>Функция REG_REPLACE
Вторая переменная port (десятичная) — to_decimal(reg_replace(first_variable_port,'s+',''))
s — определяет пробелы в регулярном выражении информатики

См. изображение ниже, введите здесь описание изображения
используется тот же номер, который вы указали. Используйте тот же тип данных и функцию

Отладчик дает точный результат, удаляя пробелы на изображении ниже.

введите здесь описание изображения
Возможно, у вас возникли проблемы с другими преобразованиями, через которые вы проходите. Отладьте и проверьте данные один раз.

Надеюсь, у вас получилось, любые вопросы не стесняйтесь спрашивать
Чтобы получить удовольствие от информатики, развлекайтесь на https://etlinfromatica.wordpress.com/

person Jim Macaulay    schedule 20.09.2016
comment
Более простой REPLACECHR также должен работать в этом случае. Кроме того, столбец должен быть уже представлен как строка, потому что в поле «Число» не должно быть пробелов. - person Samik; 20.09.2016
comment
Если это строка, вы можете сразу использовать функцию reg_replace. replace_chr проще, но использование reg_replace эффективно, а также дает хорошие знания о регулярных выражениях. - person Jim Macaulay; 20.09.2016
comment
значение поля примерно такое (- 553224,61), когда я использую вышеуказанную логику, оно возвращает 0 - person kiran; 20.09.2016
comment
Обновите ответ с отлаженным изображением. Пожалуйста, подтвердите - person Jim Macaulay; 21.09.2016

Если я правильно понимаю, вам нужно заменить и spaces, и brackets. Вот выражение:

TO_DECIMAL(
    REPLACECHR(0,
        REPLACECHR(0, '(- 98765.00)', ' ', '') -- this part does the space replacement
    , '()', '') -- this part replaces the brackets
)
person Maciejg    schedule 21.09.2016