powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как SQL`но посчитать контрольный разряд к СНИЛС?
7 сообщений из 7, страница 1 из 1
Как SQL`но посчитать контрольный разряд к СНИЛС?
    #38896211
СНИЛС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с СНИЛС без контрольного разряда. Необходимо посчитать его и заменить данные в поле. Поделитесь каким-нибудь примером охватывающим сабж для воровства оного и изучения.
...
Рейтинг: 0 / 0
Как SQL`но посчитать контрольный разряд к СНИЛС?
    #38896278
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СНИЛС,

Считать так: http://www.genon.ru/GetAnswer.aspx?qid=050358a0-f860-40ef-bca8-804da685512f
Изменить в поле - через UPDATE вестимо
...
Рейтинг: 0 / 0
Как SQL`но посчитать контрольный разряд к СНИЛС?
    #38896325
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СНИЛС,

судя по вики , как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
with recursive
s1 as (
  select '112-233-445 95' as snils from rdb$database union all
  select '165-300-180 28' from rdb$database union all
  select '999-999-999 95' from rdb$database
)
,s2 as (
  select s1.snils, replace(substring(s1.snils from 1 for 11),'-','') n, right(s1.snils,2) to_check
  from s1
)
,r as(
  select 1 i from rdb$database union all select r.i+1 from r where r.i<9
)
,c as (
    select
         s2.snils
        ,s2.n
        ,s2.to_check
        ,sum((10-r.i) * cast( substring(s2.n from r.i for 1) as smallint )) dsum
    from s2 cross join r
    group by s2.snils,s2.n,s2.to_check
)
,d as (
    select
     c.snils
    ,c.n
    ,c.to_check
    ,iif( c.dsum < 100, c.dsum, iif(c.dsum in(100,101), 0,  coalesce(nullif(mod(c.dsum, 101), 100),0)  ) ) checked
    from c
)
select d.snils, d.to_check, d.checked, iif(d.to_check = d.checked, 'ok', 'x') result
from d;
Output sample:
SNILSTO_CHECKCHECKEDRESULT112-233-445 959595ok165-300-180 282828ok999-999-999 95951x
...
Рейтинг: 0 / 0
Как SQL`но посчитать контрольный разряд к СНИЛС?
    #38896328
СНИЛС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблоид, ужос! распечатал, пошел "курить"...
...
Рейтинг: 0 / 0
Как SQL`но посчитать контрольный разряд к СНИЛС?
    #38896487
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид
Код: plaintext
1.
    ,iif( c.dsum < 100, c.dsum, iif(c.dsum in(100,101), 0,  coalesce(nullif(mod(c.dsum, 101), 100),0)  ) ) checked

можно заменить на
Код: sql
1.
    ,coalesce(nullif(mod(c.dsum, 101), 100), 0) checked
...
Рейтинг: 0 / 0
Как SQL`но посчитать контрольный разряд к СНИЛС?
    #39010300
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидСНИЛС,

судя по вики , как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
with recursive
s1 as (
  select '112-233-445 95' as snils from rdb$database union all
  select '165-300-180 28' from rdb$database union all
  select '999-999-999 95' from rdb$database
)
,s2 as (
  select s1.snils, replace(substring(s1.snils from 1 for 11),'-','') n, right(s1.snils,2) to_check
  from s1
)
,r as(
  select 1 i from rdb$database union all select r.i+1 from r where r.i<9
)
,c as (
    select
         s2.snils
        ,s2.n
        ,s2.to_check
        ,sum((10-r.i) * cast( substring(s2.n from r.i for 1) as smallint )) dsum
    from s2 cross join r
    group by s2.snils,s2.n,s2.to_check
)
,d as (
    select
     c.snils
    ,c.n
    ,c.to_check
    ,iif( c.dsum < 100, c.dsum, iif(c.dsum in(100,101), 0,  coalesce(nullif(mod(c.dsum, 101), 100),0)  ) ) checked
    from c
)
select d.snils, d.to_check, d.checked, iif(d.to_check = d.checked, 'ok', 'x') result
from d;
Output sample:
SNILStTO_CHECKtCHECKEDtRESULT112-233-445 95t95t95tok165-300-180 28t28t28tok999-999-999 95t95t1tx

На FB 2.5 получил:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
CTE 'R' has cyclic dependencies.

Что не так сделал?
...
Рейтинг: 0 / 0
Как SQL`но посчитать контрольный разряд к СНИЛС?
    #39010302
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFF,

обновитесь до последнего ФБ. Там в парсинге рекурсивных запросов было "что-то" до 2.5.3 (вроде).
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как SQL`но посчитать контрольный разряд к СНИЛС?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]