La deuxième étape relie Roskilde à Nyborg sur une distance de 202,2 kilomètres. Le parcours se déroule intégralement en bord de mer. Le final est marqué par la traversée du Grand Belt, entre l'Ile de Seeland et celle de Fionie. Trois ascensions sont répertoriées : la côte d'Asnaes Indelukke (1,1 km à 5,4 %, 4e catégorie), la côte d'Høve Stræde (0,8 km à 6 %, 4e catégorie et la côte de Kårup Strandbakke (1,3 km à 5,8 %, 4e catégorie), vingt kilomètres séparent le premier du troisième. Le sprint intermédiaire est situé à Kalundborg (km 126,9).
Après un départ fictif donné dans les rues de Roskilde, le Tour effectue un arrêt symbolique sur le parvis de la Tour de l'église Saint-Laurent[2], un chœur d'enfants chante La Marseillaise et le Der er et yndigt land, tandis que le Prince Frederik de Danemark et le directeur du Tour de France, Christian Prudhomme, coupe la banderole inaugurant le Grand Départ du Danemark. Le départ réel est retardé de quelques kilomètres, après les crevaisons du Belge Tim Wellens (Lotto-Soudal) et du Britannique Adam Yates (INEOS Grenadiers).
Une fois le départ donné, quatre coureurs forment l'échappée : le Danois Magnus Cort Nielsen (EF Education-EasyPost), les deux coéquipiers Français Cyril Barthe et Pierre Rolland (B&B Hotels-KTM) et le Norvégien Sven Erik Bystrøm (Intermarché-Wanty-Gobert Matériaux).
Au sommet de la côte d'Asnaes Indelukke (1,1 km à 5,4 %, 4e catégorie), Magnus Cort Nielsen passe en tête devant Sven Erik Bystrøm, alors que les deux coureurs de la B&B Hotels-KTM sont distancés.
Au sommet de la côte d'Høve Stræde (0,8 km à 6 %, 4e catégorie), le Danois, à domicile, récidive ; le duo français compte un retard de onze secondes et le peloton, quant à lui, comporte un débours de deux minutes et cinquante-six secondes.
Au sommet de la côte de Kårup Strandbakke (1,3 km à 5,8 %, 4e catégorie), Cort Nielsen fait la passe de trois, célébrant le maillot blanc à pois rouges qu'il acquiert, devant un public comble dédié à sa cause. Le groupe de chasse et le peloton comptent, respectivement, une minute et trois minutes de retard ; ce premier groupe est repris par ce second à l'entrée d'Havnsø.
Au sprint intermédiaire de Kalundborg, Bystrøm précède Cort Nielsen, avec trente-cinq secondes d'avance sur le peloton, dans lequel les sprinteurs se disputent les points restants : l'Australien Caleb Ewan (Lotto-Soudal) devance le Néerlandais Wout van Aert (Jumbo-Visma) et le Slovaque Peter Sagan (TotalEnergies).
Ouvrant la route depuis le départ de Roskilde, Bystrøm et Cort Nielsen sont finalement repris par le peloton ; d'abord le Danois, à cinquante-huit kilomètres de Nyborg, puis le Norvégien, à trente-deux kilomètres de l'arrivée. Entre-temps, les deux coureurs de la Bora-Hansgrohe, l'Allemand Nils Politt et le Russe Aleksandr Vlasov, et le Britannique Christopher Froome (Israel-Premier Tech), crèvent à tour de rôle. Après un rétrécissement, le Letton Krists Neilands (Israel-Premier Tech) et le Néerlandais Martijn Tusveld (DSM) se retrouvent au sol.
Quelques frayeurs sont connues avant la traversée du Grand Belt. Parmi les coureurs retardés se trouvent les déjà-vus Magnus Cort Nielsen, Nils Politt et Pierre Rolland, l'Américain Kevin Vermaerke (DSM), l'Australien Michael Storer (Groupama-FDJ), le maillot jaune belge Yves Lampaert (Quick-Step Alpha Vinyl), le Canadien Michael Woods (Israel-Premier Tech), le Colombien Rigoberto Urán (EF Education-EasyPost), le Danois Michael Mørkøv (Quick-Step Alpha Vinyl), les Espagnols Jonathan Castroviejo (INEOS Grenadiers) et Ion Izagirre (Cofidis), les quatre Français Frank Bonnamour (B&B Hotels-KTM), Victor Lafay (Cofidis), Valentin Madouas (Groupama-FDJ) et Anthony Turgis (TotalEnergies), l'Italien Giulio Ciccone (Trek-Segafredo), les deux Néerlandais George Bennett (UAE Emirates) et Fabio Jakobsen (Quick-Step Alpha Vinyl), le Polonais Rafał Majka (UAE Emirates) et le Portugais Rúben Guerreiro (EF Education-EasyPost). Finalement, les coureurs de la Quick-Step Alpha Vinyl parviennent à revenir dans la première partie de la traversée. Quant à ceux de EF Education-EasyPost, ils refont leur retour dans le peloton dans la seconde partie.
Le vent de face empêche toute opération tactique de la part des équipes, certains coureurs retardés en profitent pour faire leur retour à l'avant. Dans les trois derniers kilomètres, une chute massive scinde le peloton en deux. Une arrivée au sprint semble indéniable : un truel s'organise entre le Danois Mads Pedersen (Trek-Segafredo), qui lance le sprint en premier, Fabio Jakobsen et Wout van Aert, où le Néerlandais s'impose d'une demie roue[2].
Au niveau des différents classements, Magnus Cort Nielsen remporte le premier maillot à pois de cette 109e édition du Tour de France. Au jeu des bonifications, Wout van Aert récupère les maillots jaune et vert de Yves Lampaert. La Jumbo-Visma reste à la première place du classement par équipes, le maillot blanc reste sur les épaules du Slovène Tadej Pogačar (UAE Emirates), qui termine l'étape avec les deux pneus crevés. Le prix de la combativité revient à Sven Erik Bystrøm.