Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
Всем Здравствуйте! Задача, похоже, простая, но увы... Есть таблица a, которая, по сути, является отчетной формой, в которой, помимо прочего, для каждой записи есть дата записи (date, тип данных date, задается пользователем в приложении), есть поле для присвоения порядкового номера (regNumber, тип данных varchar) этой записи (речь не про identity) вида "ааа/число", то есть в итоге значения поля должны выглядеть так: aaa/1 aaa/2 .... aaa/n нюанс в том, что числовая последовательность должна обнуляться с наступлением нового года (технически - как только в БД появится запись с датой, где год будет больше на один предыдущего), то есть для первой записи за 2020 номер опять должен быть вида "aaa/1"; код приложения подразумевает, что остальные поля (в том числе date) к моменту генерации порядкового номера заполнены; префикс (ааа), в принципе, могу вынести в код приложения, соответственно, тип данных в поле могу поменять на простой int загвоздка сейчас в том, чтобы сгенерить это поле номера исходя из трех условий: 1. текущий год, если нет записей - присвоение стартового значения (оно будет больше 1); 2. текущий год, если есть записи - присвоение значения (предыдущее+1) 3. наступил следующий год - присвоение стартового значения (1) и далее по пункту 2 что делал: пробовал через declare выцеплять дату Код: sql 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. а вот как прописать присвоение номера к следующей записи (@prefix+(@Number+1)) ? Также вопрос - возможно, лучше использовать просто update с when ... case? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 13:51 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
Схематично. Берём макс. дату из таблицы и сравниваем её год с текущим годом. Равны? плюс 1 к максимальному номеру за текущий год. Иначе - просто 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:07 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
arhey85, звучит как сиквенс, с reset раз в год ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:16 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
TaPaKarhey85, звучит как сиквенс, с reset раз в год С той лишь разничей, что документы у него (судя по описанию) могут проводиться "задним числом"... и да "пациент" будет переживать, если вдруг у него в нумерации появятся "дырки" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:23 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
arhey85, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:26 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
buserдокументы у него (судя по описанию) могут проводиться "задним числом"Так это ни на что не влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:26 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
Akinabuserдокументы у него (судя по описанию) могут проводиться "задним числом"Так это ни на что не влияет. как не влияет, а как же после reset-а генерить номер в прошлом, закрытом периоде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:28 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
Сорри, забыл указать, СУБД - mssql 2008r2, нет там секвенса (с 2012, вроде только) - увы, mssql не postegres ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:32 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
msLexкак же после reset-а генерить номер в прошлом, закрытом периоде?Берём макс. номер за год, за который вставляется запись, и плюс один. Какие проблемы-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:47 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
msLexкак же после reset-а генерить номер в прошлом, закрытом периоде? Грубо Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:52 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
AkinamsLexкак же после reset-а генерить номер в прошлом, закрытом периоде?Берём макс. номер за год, за который вставляется запись, и плюс один. Какие проблемы-то? Видимо в том, что это уже не решение через сиквенс, которое комментировал buser ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:52 |
|
||
|
создать последовательность значений поля с обнулением по истечению временного интервала
|
|||
|---|---|---|---|
|
#18+
AkinamsLexкак же после reset-а генерить номер в прошлом, закрытом периоде? Грубо Код: sql 1. 2. 3. 4. 5. 6. 7. BEFORE UPDATE - это что? вы веткой ошиблись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 14:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39883616&tid=1687035]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 390ms |

| 0 / 0 |
