Функции SAP HANA SQL String - PullRequest
       10

Функции SAP HANA SQL String

0 голосов
/ 27 августа 2018

У меня есть таблица со столбцом LIST_OF_NUMBERS, содержащая следующие строки:

10, 20, 395, 443, 534, 734, 954, 105, 156

Я хочу обрезать столбец LIST_OF_NUMBERS до 10 символов следующим образом:

LEFT(LIST_OF_NUMBERS,10)

10, 20, 39

Однако, если число из списка строк частично обрезано, я хочу вместо этого усечь все число. Например, в моем случае я не хочу отображать 39, поскольку это неверное истолкование. Я хочу усечь все число следующим образом:

10, 20,

Я считаю, что это может быть достигнуто с помощью следующего условия:

Если строка не заканчивается запятой, обрезайте строки до конца запятой.

Как я могу перевести это условие в сценарий sql?

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

1 Ответ

0 голосов
/ 27 августа 2018

Один вариант - это длинный случай при утверждении. Он будет смотреть на 11-й символ, если это запятая, нам нужны ровно первые 10 цифр, если это не так, мы посмотрим на 10-ю цифру, если это запятая, мы получим первые 9 цифр, если это не так, мы посмотрим на 9-е и получим первые 8 цифр и так далее ...

Вы можете сократить эту проверку, если числа, составляющие ваши строки, всегда имеют определенную длину или меньше, но каждый из них будет проверяться отдельно

case when right(left(list_of_numbers,11),1)=','
    then left(list_of_numbers,11)
when right(left(list_of_numbers,10),1)=','
    then left(list_of_numbers,10)
when right(left(list_of_numbers,9),1)=','
    then left(list_of_numbers,9)
when right(left(list_of_numbers,8),1)=','
    then left(list_of_numbers,8)
when right(left(list_of_numbers,7),1)=','
    then left(list_of_numbers,7)
when right(left(list_of_numbers,6),1)=','
    then left(list_of_numbers,6)
when right(left(list_of_numbers,5),1)=','
    then left(list_of_numbers,5)
when right(left(list_of_numbers,4),1)=','
    then left(list_of_numbers,4)
when right(left(list_of_numbers,3),1)=','
    then left(list_of_numbers,3)
when right(left(list_of_numbers,2),1)=','
    then left(list_of_numbers,2)
else left(list_of_numbers,1) end as result

остальное предполагает, что строка начинается с единственного цифрового числа.

...