AMERICAN LEAGUE: Rangers 5, Mariners 1

Bartolo Colon laughed off having a line drive hit him in the stomach, allowed four hits in 7⅔ shutout innings and gave Texas a win over host Seattle on Wednesday.

On the cusp of his 45th birthday, Colon (2-1) put together arguably his best performance this season.

Delino DeShields gave Texas the lead with a two-out RBI double in the eighth inning to score Isiah Kiner-Falefa. The Rangers added four more in the ninth, all after Ryon Healy’s two-out error and two runs scoring on a wacky strikeout.

Ronald Guzman struck out swinging with the bases loaded and two outs, but catcher David Freitas couldn’t handle the pitch from Marc Rzep­czynski. Jurickson Profar scored from third on the passed ball and Kiner-Falefa from second after Freitas made an unnecessary throw trying to get Guzman at first.

But Colon was the story, including taking the brunt of Jean Segura’s line drive off his stomach in the fourth inning, then laughing about it as Rangers staff came to check on him. It was the second time this season he pitched into the eighth. Colon struck out two and threw 71 of 96 pitches for strikes.

Rays 5, Royals 3

C.J. Cron homered and scored three runs, and Tampa Bay beat host Kansas City to complete a three-game sweep of the woeful Royals.

Cron extended his on-base streak to 22 games when he was hit by a pitch from Jason Hammel (0-5) in a three-run first that included Brad Miller’s RBI groundout and Adeiny Hechavarria’s two-run single.

Cron homered in the third, singled in the fifth and scored on Wilson Ramos’ double-play grounder for a 5-1 lead.

Tampa Bay had lost six of seven coming in but swept the Royals for the first time since four games from Aug. 8-11, 2011. The Rays had not swept a series in Kansas City since three games from July 17-19, 2009.

Kansas City has lost five straight and seven of eight, dropping to 13-30 for its worst 43-game start since 2006.

Red Sox 6, Athletics 4

Xander Bogaerts hit a three-run homer, J.D. Martinez added a two-run shot and host Boston avoided its first series sweep this season with a win over Oakland.

The win also prevented the Red Sox from matching their season-high losing streak of three games.

Chris Sale (4-1) gave up just two runs and two hits in five innings, striking out nine and walking four — his most base on balls since also allowing four on Aug. 31, 2016.

Fourth reliever Craig Kimbrel got the final three outs for his 12th save.

Marcus Semien hit a two-run homer, and Matt Joyce and Matt Olson each hit a solo shot for the Athletics, who won the first two games and finished the season series by winning four of six.

NATIONAL LEAGUE: Reds 6, Giants 3

Scooter Gennett homered a half-inning after the second baseman saved two runs with a diving catch on a difficult popup, helping Cincinnati avoid a sweep by host San Francisco.

Adam Duvall hit a three-run homer in the first, and Matt Harvey went four innings in his second start since joining the Reds from the Mets. Reliever Jared Hughes (2-2) pitched two scoreless innings as Cincinnati won for the seventh time in nine games.

With the bases loaded and two outs in the sixth, Gennett somehow chased down a popup by pinch-hitter Gorkys Hernandez along the right-field line near the visiting bullpen — scissoring his legs over right fielder Scott Schebler to make the grab.

Braves 4, Cubs 1

Ronald Acuna Jr. drove in Ozzie Albies with the tiebreaking run in the eighth inning to send Atlanta past host Chicago.

Carl Edwards Jr. (2-1) allowed five straight baserunners in Atlanta’s three-run eighth, including a bases-loaded walk to Tyler Flowers, without getting an out. Justin Hancock also forced in a run with a walk to Johan Camargo.

The Braves’ big inning was set up by Albies’ triple to the wall in center field past Albert Almora Jr., who robbed Flowers of a probable home run earlier in the game.

Brewers 8, Diamondbacks 2

Travis Shaw, Domingo Santana, Christian Yelich and Tyler Saladino homered in the first four innings off Matt Koch as Milwaukee beat host Arizona to take two of three.

Brandon Woodruff (2-0) held the Diamondbacks offense to one hit in five innings, Daniel Descalso’s two-run homer.

Shaw, who has a team-high 10 home runs, also doubled and scored. The Brewers have won three of four, outscoring their opponents 23-9.

Arizona finished a 1-6 homestand and has lost seven of eight heading into a nine-game trip. The game drew 16,762, the smallest home crowd for Arizona this season.

Marlins 6, Dodgers 5

Los Angeles erased a four-run deficit and still lost its sixth game in a row when J.T. Realmuto’s tiebreaking homer in the sixth inning helped host Miami win.

The defending NL champ Dodgers and the rebuilding Marlins have identical 16-26 records.

Miami bopper Justin Bour hit a two-run homer, his ninth. Starlin Castro tied a career high with four hits to hike his batting average to .300.

Yasmani Grandal hit his seventh homer and singled in a run for the Dodgers.

INTERLEAGUE: Blue Jays 12, Mets 1

J.A. Happ reached three times and allowed only two baserunners over seven innings as Toronto got its first road win against host New York on a rainy day in Queens.

Happ (5-3) struck out 10 while pitching two-hit ball. The left-hander also singled twice and walked in his first multihit game since 2011.

The Blue Jays were 0-12 against the Mets in New York, the longest such skid against one team in interleague history, according to the Elias Sports Bureau.

New York’s Brandon Nimmo homered off Danny Barnes with two outs in the ninth and Wilmer Flores added a double before Barnes finished Toronto’s four-hitter.

Justin Smoak, Teoscar Hernandez and Richard Urena each homered and drove in three runs as Toronto piled up 15 hits.

Pirates 3, White Sox 2

Pinch-hitter Josh Bell singled to break a seventh-inning tie, and host Pittsburgh beat Chicago.

The Pirates have won seven of eight and improved to 10-2 in interleague play this season.

The White Sox have lost eight of nine and 13 of 15. A major-league-worst 10-29, the White Sox have matched their worst start since 1948.

With the score tied 2-2, Elias Diaz doubled off Joakim Soria (0-2) leading off the seventh and Jordy Mercer walked with one out. Bell grounded a single into left.

Rookie Edgar Santana (1-0) allowed one hit in 1 ⅓ scoreless innings for his first major league win.

Cardinals 7, Twins 5

Dexter Fowler reached base four times and drove in two runs in his return to the lineup and St. Louis beat former starter Lance Lynn and host Minnesota.

Matt Carpenter had three hits after being demoted to seventh in the batting order, and Tommy Pham added two hits, including his eighth homer of the year. St. Louis had lost five of seven games, scoring more than three runs just once.

Jordan Hicks (2-1) pitched a scoreless inning in relief for St. Louis. Cardinals starter Miles Mikolas left after 4⅔ innings after allowing two runs on two hits and two walks.

Bud Norris allowed an inherited run to score on a wild pitch but secured five outs for his ninth save in as many chances.

Phillies 4, Orioles 1

Nick Pivetta tied a career-high with 11 strikeouts, Cesar Hernandez homered and Philadelphia beat host Baltimore in a wet interleague matchup.

Philadelphia (24-16) climbed eight games over .500 for the first time since the end of the 2011 season. The Orioles (13-29) have dropped two of three and have the second- worst record in the American League, ahead of only the Chicago White Sox.

Pivetta (3-2) won his second straight start, allowing one run, two hits and one walk in seven inning.