5 минут в офисе Сити и они потеряли клиента, кт. быть может и несколько млн положил бы на счет.
Первый раз прибыл в Ситибанк в 9:45, с удивлением обнаружил, что офис еще не работает. Ну ладно, работают зато до 20:00.
Прихожу в другой день около 11. Удивляюсь очереди (2-3 человека) к банкомату и еще столько же в очереди в кассу. Первый попавшийся консультант-операционист общается по телефону. Машет рукой, что можно присесть. Видимо разговор заканчивается. Разговор по работе. Нормальная ситуация.
Ок, начали беседу. Я хочу их продукт CitiOne, карточку, сберегательный счет, овердрафт не нужен. На всякий случай сразу же спрашиваю: могу ли я потом получить выписку о состоянии счета на английском языке, сколько это будет стоить? Операционист предлагает мне узнать об этом в кассе!!! Сам он ничего не знает.
Я весьма удивляюсь нахальству (вспоминая, что там очередь) и предлагаю ему самому об этом узнать. Он пошел. Слышу диалог с кассиром, понимаю что тухлое дело. Решил тоже подойти. Тут же подскакивает охранник и предлагает мне вернуться за линию перед кассой (охраник без опозновательных знаков и без униформы).
Результат: выписку они сделать могут, но ее ждать надо неопределенный срок, не меньше недели. Операционист еще и ухмыляется, что дескать выписку на английском делают в зарубежных офисах, а в России не могут вот так просто. Международный банк :(
Теперь идем в Райффайзен. Пусть там все за деньги, но если подход к клиенту лучше, то они получат клиента.
2010-06-30
2010-06-16
Список значений в набор строк
Необычная задача - преобразовать список значений разделенных запятыми в набор строк.
Имеем некую таблицу lists, в поле code которой имеем некоторые списки значений через запятую (111,222,333 и т.п.). В результате следующего запроса получаем выборку уникальных значений всех списков из таблицы lists, каждое находится в отдельной строке.
select distinct code
from
(select regexp_substr(q.code, '[^,]+', 1, rownum) code
from dual,
(select length(regexp_replace(wm_concat(l.code), '[^,]'))+1 l_cnt
,wm_concat(l.code) code
from lists l
) q
connect by rownum <= q.l_cnt
)
where code is not null;
P.S. используем конструкцию вида select rownum from dual connect by rownum <= :counter для генерации нужного нам числа строк.
Имеем некую таблицу lists, в поле code которой имеем некоторые списки значений через запятую (111,222,333 и т.п.). В результате следующего запроса получаем выборку уникальных значений всех списков из таблицы lists, каждое находится в отдельной строке.
select distinct code
from
(select regexp_substr(q.code, '[^,]+', 1, rownum) code
from dual,
(select length(regexp_replace(wm_concat(l.code), '[^,]'))+1 l_cnt
,wm_concat(l.code) code
from lists l
) q
connect by rownum <= q.l_cnt
)
where code is not null;
P.S. используем конструкцию вида select rownum from dual connect by rownum <= :counter для генерации нужного нам числа строк.
2010-06-01
Загадочные конструкции в коде
Часто занимаюсь отладкой и чтением чужого кода. Иногда попадаются странные куски. Буду наверное публиковать, а то потом забывается.
- nvl(vStr, '') - между кавычками пробела нет!
- select ... from... where nvl(vNum, 1) = 0 - чем не понравилось сравнивать сразу с 0м непонятно, зато усложнили работу оптимизатора в борьбе с null-ами
- if trunc(abs(vSum)*100)/100 != 0 then - долго ломал голову, пока Amd не подсказал. Тут замаскировано: abs(vSum) < 0.01
- nvl(vStr, '') - между кавычками пробела нет!
- select ... from... where nvl(vNum, 1) = 0 - чем не понравилось сравнивать сразу с 0м непонятно, зато усложнили работу оптимизатора в борьбе с null-ами
- if trunc(abs(vSum)*100)/100 != 0 then - долго ломал голову, пока Amd не подсказал. Тут замаскировано: abs(vSum) < 0.01
Подписаться на:
Сообщения (Atom)