Angels 1, Rangers 0: Jered Weaver won a pitching duel with fellow All-Star C.J. Wilson as host Los Angeles, helped by an error by Texas center fielder Endy Chavez, scored a run in the second inning without getting a hit and moved within three games of the AL West leaders.
Weaver (13-4) scattered seven hits in seven-plus innings and struck out six to win his seventh straight decision and reduce his major league-best ERA to 1.81. The Angels won the rubber game of the three-game set one day after rallying from a five-run deficit to end the Rangers' 12-game winning streak.
Wilson (10-4) held the Angels to just two hits over eight innings, struck out eight and walked one.
Rays 2, Yankees 1: All-Star James Shields won for the first time in nearly a month, outpitching CC Sabathia (14-5), who lost for the first time since June 9.
Shields (9-8) allowed six hits, walked three and struck out six over 72⁄3 innings in his second duel with Sabathia in 12 days. The right-hander lost 1-0 to the major-league wins leader on July 10 at Yankee Stadium, yielding the game's only run on an errant pickoff throw to third base.
Slumping Evan Longoria homered for Tampa Bay.
Blue Jays 7, Mariners 5: Rajai Davis broke a tie by driving in two runs with a double in the eighth inning, sending visiting Seattle to its 12th straight loss, the team's worst losing streak since 2008.
Miguel Olivo erased a 5-1 deficit by hitting Seattle's first grand slam of the season in the top of the eighth.
Tigers 6, Twins 2: Justin Verlander picked up his 13th win, limiting host Minnesota to one run on five hits over eight innings. Brennan Boesch and Jhonny Peralta homered for the winners.
Padres 5, Marlins 3: Dustin Moseley and three relievers held host Florida without an earned run.
Cameron Maybin had four hits and scored twice for the Padres, who outscored the Marlins 23-6 while sweeping the three-game series.
Padres second baseman Orlando Hudson hit a wall after catching a pop foul in the seventh inning and was carted off the field. He was taken to a hospital for neck and shoulder tests but was expected to be fine.
Braves 9, Rockies 6: Jason Heyward and Freddie Freeman each homered and had two hits and visiting Atlanta overcame a shaky start by Tommy Hanson to earn a split of the four-game series. Hanson (11-5) allowed six runs on seven hits and struck out seven in six innings.
Cardinals 6, Mets 2: Albert Pujols hit a two-run homer in the first and Jake Westbrook had the Mets pounding the ball into the ground over eight excellent innings as visiting St. Louis avoided a three-game sweep.
On a sweltering day at Citi Field, Westbrook (8-4) worked efficiently (90 pitches) and rapidly, and kept his infielders busy. He recorded 17 outs on groundballs, including two double plays, and allowed only four hits and two runs.