On November 14, 2014, Williams along with Andrew Velazquez was traded from the Diamondbacks to the Tampa Bay Rays for Jeremy Hellickson.[5] He spent 2015 with the Bowling Green Hot Rods and Charlotte Stone Crabs, compiling a combined .277 batting average with seven home runs and 48 RBIs in 122 games, and 2016 with Charlotte and the Montgomery Biscuits where he batted .295 with ten home runs and 59 RBIs in 90 total games. In 2017, Williams played for Montgomery where he slashed .301/.364/.489 with 14 home runs and 72 RBIs in 96 games.[6]
The Rays added him to their 40-man roster after the 2017 season.[7] Williams was promoted to the major leagues for the first time on July 21, 2018.[8]
St. Louis Cardinals
On July 31, 2018, Williams, along with Génesis Cabrera and Roel Ramírez, were traded to the St. Louis Cardinals in exchange for Tommy Pham.[9] Williams was optioned to the minors and would not appear in the major leagues again until September 16, 2020. In 2021, Williams made the Opening Day roster after batting .229 with one home run over 35 spring training at-bats.[10] Williams hit his first major-league home run on April 16, 2021, off of Zach Eflin, in a game against the Philadelphia Phillies. He was eventually placed on the injured list. Over 51 games prior to the injury, he batted .160/.270/.261 with four home runs and 11 RBIs.[11] After being activated, he was optioned to the Memphis Redbirds with whom he finished the year.[12] He was removed from the 40-man roster on November 5, 2021 and elected free agency on November 9.[13] He became a free agent following the season.
Williams played in two games for Staten Island in 2024, going 3–for–6 (.500) with one RBI. On May 10, 2024, Williams was released by the FerryHawks.[19]