The 24 year old smashed a 64-ball 116 not out as England chased down a challenging 190-run target in 19.2 overs.
With England needing 23 off the last two overs Hales smashed Nuwan Kulasekara for a six to reach his hundred off 60 balls and then hit Angelo Mathews for the winning six, to anchor England’s best chase in T20 cricket.
Hales hit six sixes and 11 boundaries in a breathtaking display of batting.
The victory gives England their first win in two games while Sri Lanka lost their first in three to leave Group 1 wide open after South Africa beat the Netherlands by six runs earlier in the day for their second win in three matches.
New Zealand have one win in two matches.
“That was a very special knock and one of the best I’ve seen in an England shirt,” said England captain Stuart Broad.
“World events are big and that kind of win will give our dressing room a lot of belief.”
Sri Lanka captain Dinesh Chandimal blamed the excessive dew for his spinners’ failure to put the brakes on England.
“It was a good total, but it was difficult with the dew for our bowlers.
“We had two spinners, but they couldn’t grip the ball – especially Ajantha Mendis,” said Chandimal.
England were rocked by Kulasekara (4-32) in the first over when he bowled Michael Lumb off the fifth ball and had Moeen Ali caught in the slips off the last to leave England reeling at none for two.
But Hales, who was dropped on 55 by Mahela Jayawardene, and Eoin Morgan took the attack to the Sri Lankan bowlers, with Hales smashing three sixes and a four off Mendis.
Morgan was finally dismissed by Kulasekara with 38 needed for victory.
The previous best third wicket stand in T20s was 137 set by the New Zealand pair of Martin Guptill and Kane Williamson against Zimbabwe at Auckland in 2012.
Sri Lanka’s total was built around 89 by Jayawardene and 55 by Tillakaratne Dilshan.
Jayawardene hit 11 boundaries and three sixes during his 51-ball knock and Dilshan smashed two sixes and four fours in his 47-ball innings as the two added 145 for the second wicket.
Jayawardene was lucky not to be out off the first ball he faced when television replays showed Lumb took a brilliant catch off Jade Dernbach.
The on-field umpires referred the catch to television umpire Steve Davis, who ruled that replays were inconclusive.
England dropped four catches, two off Jayawardene on five and 82, one off Dilshan on 21, and one off Thisara Perera who made 23 not out.
England dismissed opener Kusal Perera for three in the second over, but then Jayawardene took full advantage of his lucky escape, eventually smashing James Tredwell for his eighth boundary to complete his ninth half-century off just 32 balls.
He was finally bowled by Chris Jordan. Both Jordan and Dernbach picked up two wickets apiece.
Australia play the West Indies and India face Bangladesh in Group 2 in Dhaka on Friday.
SOUTH AFRICA SAVE FACE BUT ONLY JUST
Leg-spinner Imran Tahir came to South Africa’s rescue as they survived a scare from the Netherlands with a hard-fought six-run win in their Group 1 match in Chittagong on Thursday.
Tahir took four for 21 in his four overs to keep the Netherlands to 139 in 18.4 overs in a chase for 146 in the Super-10 stage match at Zahur Ahmed Chowdhury stadium.
Tahir’s effort overshadowed paceman Ahsan Malik’s best bowling figures of five for 19 by a Dutchman in all T20 internationals which restricted South Africa to 145 for nine in their 20 overs.
The Netherlands had only themselves to blame for not chasing down the target after a fiery start of 58 in 5.5 overs, with Stephan Myburgh completing a 28-ball 51.
The Netherlands went on to lose their last seven wickets for 42 runs.
“We obviously let this one go,” said Dutch skipper Peter Borren.
South Africa skipper Faf Du Plessis wasn’t happy. “We are making it hard for ourselves,” he said, “although it’s a great sign when your side is not playing 100 per cent and still gets over the line.”
Follow us on twitter at @SprtNationalUAE