diff --git a/mo/db.py b/mo/db.py
index 2697677feae44a0474e43fdab5affe609f089a5e..eb2a5d9973a49187d274e17fd59d5d4f574f5d91 100644
--- a/mo/db.py
+++ b/mo/db.py
@@ -9,7 +9,7 @@ import re
 from sqlalchemy import \
     Boolean, Column, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint, \
     text, func, \
-    create_engine, inspect, select
+    create_engine, inspect, select, or_, and_
 from sqlalchemy.engine import Engine
 from sqlalchemy.orm import relationship, sessionmaker, Session, class_mapper, joinedload, aliased
 from sqlalchemy.orm.attributes import get_history
@@ -318,6 +318,29 @@ class Round(Base):
         return " ".join(times)
 
 
+def find_round(year: Optional[int], category: Optional[str], code: str) -> Round:
+    if not year:
+        raise mo.CheckError('Neuveden ročník pro nalezení kola')
+    if not category:
+        raise mo.CheckError('Neuvedena kategorie pro nalezení kola')
+    try:
+        seq: Optional[int] = int(code)
+    except ValueError:
+        seq = None
+
+    r = (
+        get_session().query(Round)
+        .filter_by(year=year, category=category)
+        .filter(or_(Round.code == code, and_(Round.code == "", Round.seq == seq if seq else False)))
+        .all()
+    )
+    if len(r) < 1:
+        raise mo.CheckError(f'Kolo {year}-{category}-{seq} nenalezeno')
+    if len(r) > 1:
+        raise mo.CheckError(f'Kolo {year}-{category}-{seq} nelze určit jednoznačně')
+    return r[0]
+
+
 class User(Base):
     __tablename__ = 'users'