Задачки в HANA. Ответы
Небольшие задачки в HANA - полезны для изучения и ознакомления. В статье представлены решения 10 задач.
Введение.
Ниже представлены задачи из (ссылка) и их решения. Решения актуальны для HANA SP7, но большинство (кроме задачи 6) будут работать также и в SP6.
Задача 1.
Дана таблица, в которой есть один столбец (см. Таб.1.), содержащий численно-буквенные, а также только численные значения.
Необходимо выбрать только численные значения (см. Таб.2.)
Примечания:
- Dynamic SQL и курсоры не использовать.
- Возможны два варианта решения.
Решение 1:
Если значения в столбце представлены исключительно буквами и цифрами и специальных символов не встречается, то достаточно сравнить регистры значений. Большие буквы не равны маленьким буквам, а цифры в обоих регистрах равны:
… where upper(q)=lower(q)
Решение 2:
Если значения в столбце представлены также и специальными символами, то подойдёт использование функции ltrim(), которая удаляет слева символы указанные в шаблоне(если содержатся только цифры – значение будет пустым):
where ltrim(q,'0123456789')=''
Задача 2.
Почему, если взять заполненную таблицу M_TIME_DIMENSION, не работает рассчитанная колонка adddays("DATESQL",1)?
Решение:
Потому что максимальная дата равна 31.12.9999, а год 10000 в дате невозможен.
Задача 3
Есть вью следующего вида: select adder(“pole1”,”pole2”) as tt,”pole1”,”pole2” from “schema”.“tab”, где столбец tt – это результат сложения pole1+pole2*0.13. Как это сделано?
Решение:
Скалярная фукнция(UDF) :
CREATE FUNCTION adder(pole1 decimal(15,2),pole2 decimal(15,2))
RETURNS quantity decimal(15,2)
LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS
BEGIN
quantity:= :pole1 + :pole2*0.13;
END;
Задача 4
Используя только CE_* функции, сделать cross-join таблицы самой к себе.
Решение:
Для формирования cross-join-а на таблице достаточно добавить поле с константой, а потом любой join по этой константе.
Задача 5
Задать переменную сессии. Запросом считать её значение.
Решение:
SET 'MY_VAL' ='123'
SELECT SESSION_CONTEXT('MY_VAL') FROM DUMMY;
Задача 6
Сделать запрос (без создания дополнительных таблиц,только dummy) для генерации значений от 0 до 100. Результатом должен быть столбец со значениями от 0 до 100 (union 100 раз dummy не допускается).
Решение:
Данная задача разбивается на две части:
1) Формирование таблицы где есть 101 запись.
Наиболее простой способ сгенерировать записи – это cross-join таблицы к себе же.
Найдем чему равны x:
logx 100 = 7 x ~ 1,93 (то есть 2 раз dummy cross-join 7 раз)
logx 100 = 3 x ~ 4,64 (то есть 5 раз dummy cross-join 3 раза) Конечно, можно делать copy-past-ы, но гораздо приятнее воспользоваться возможностями SP7 (Оператор with) (ниже представлены оба варианта)
1)
with a as (select 1 as q from dummy union all select 1 as q from dummy)
select 1 as q from a,a,a,a,a,a,a limit
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти