У меня есть полное имя, которое содержит пустое или нулевое значение и вызывает ошибку, когда я разбиваю на имя, фамилию.
вот ошибка: ОШИБКА [22011] [IBM][DB2/AIX64] Оператор не был выполнен, поскольку числовой аргумент скалярной функции находится вне допустимого диапазона.
вот мой исходный код:
UPPER(right(AGENT_NM, (char_length (AGENT_NM) - position( ' ', AGENT_NM))))|| ', ' || UPPER(left(AGENT_NM, position( ' ', AGENT_NM) - 1)) AS AGENT_NAME,
вот что я пробовал:
1-
CASE when REGEXP_COUNT(AGENT_NM,',')> 0 then left (AGENT_NM, position( ' ', AGENT_NM) - 1) END AS FNAME,
2-
CASE when(AGENT_NM= ' ') then Null Else left (AGENT_NM, position( '
> ', AGENT_NM) - 1) END AS FNAME,
Однако он возвращает пустой.
name=str(input("your name here"))
split_name=name.split(" ")
Сначала соедините пробел в конце вашего имени:
SELECT
TRIM(UPPER(RIGHT(AGENT_NMs, char_length (AGENT_NMs) - position( ' ', AGENT_NMs))))||
', ' ||
TRIM(UPPER(left(AGENT_NMs, position( ' ', AGENT_NMs) - 1)))
AS AGENT_NAME
FROM
(
SELECT
a.*,
COALESCE(agent_nm, '')||' ' as agent_nms
FROM
yourtable a
) x
Здесь мы используем объединение, чтобы гарантировать, что имя не является нулевым, а затем мы добавляем пробел как что-то, чтобы функция положения могла найти
Верхний бит — это просто ваш код, измененный для ссылки на новое имя agent_nms и добавления дополнительной команды обрезки для удаления любых посторонних пробелов. Кстати, похоже, что в нем было слишком много скобок.