Как выбрать числовые данные определенной длины - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь выбрать числовые данные размером более 5 байтов.Я ввел ниже, но получаю ошибку ERROR: функция LENGTH требует символьное выражение в качестве аргумента 1. Не уверен, что я делаю неправильно.Любая помощь будет принята с благодарностью.

29         PROC SQL;
30            CREATE TABLE WORK.FILTER_FOR_FDRMASTER_DAILY__0000 AS
31            SELECT t1.Account_id_nr,
32                   t1.Predecessor_CC_SK,
33                   t1.Successor_CC_SK,
34                   t1.Related_CC_SK,
35                   t1.Original_CC_SK,
36                   t1.Predecessor_Argt_SK,
37                   t1.Successor_Argt_SK,
38                   t1.Predecessor_OK,
39                   t1.Successor_OK,
40                   t1.CHD_SSR_IN,
41                   t1.CHD_SYSTEM_BANK,
42                   t1.USAANR
43               FROM WORK.FILTER_FOR_FDRMASTER_DAILY_2 t1
44               WHERE t1.Successor_CC_SK NOT = . AND t1.CHD_SSR_IN = 'Y' AND t1.CHD_SYSTEM_BANK NOT BETWEEN '867700000100' AND
45                    '867700009500' AND LENGTH(t1.Successor_CC_SK) > '5'
46               ORDER BY t1.Successor_CC_SK;

1 Ответ

0 голосов
/ 26 марта 2019

Поскольку вы имеете дело как с номерами кредитных карт, так и с 5-значными номерами, давайте предположим, что все они могут храниться в одном из трех форматов:

Num:  1234567890123456
Char: 1234-5678-9012-3456
Char: 1234 5678 9012 3456

Давайте начнем с первого случая, которыйПредполагается, что переменная является числовой.Вы хотите исключить все 5-значные значения.Вы можете использовать этот трюк Рика Уиклина для подсчета количества цифр в целом числе:

proc sql noprint;
    create table want as
         select number
         from have
         where ceil(log10(number+1)) > 5
    ;
quit;

Во втором и третьем случаях они будут сохранены в виде символов.Вы можете подсчитать количество числовых символов в строке, используя countc() с опцией D.

proc sql noprint;
    create table want as
         select compress(number, ' -')
         from have
         where countc(number,'','D') > 5
    ;
quit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...