Time kills deals.
A good workaround to try and close a customer who is mid-contract with a competitor is to offer a contract buy-out.
It doesn't make sense across the board, but when specific conditions are combined, and the target is a good fit, it can be a good way to close a deal. Now.
Different ways to structure the buy-out but basically, bottom line, the idea is that the customer doesn't pay more to switch.
eg. customer 8 months into their contract, with 4 months left? Offer a 16 months contract for the price of 12.
Works with up to half contract (eg 6 months left) - beyond can be tricky from a unit economics perspective.
It can also take the form of a straight discount to price match what they pay with the competitor. Though this should be a very last resort solution, possibly backed by other factors, ie with leverage (eg brand equity of closing that particular logo, ripple effect on other deals, etc..).