SELECT code, format, to_char(code, format) AS out, to_char(code, format) = expect AS pass FROM ( VALUES ('EC4Y 0HQ'::postcode, 'AD SW', 'EC4Y 0HQ'), ('EC4Y 0HQ'::postcode, 'ADSW', 'EC4Y0HQ'), ('EC4Y 0HQ'::postcode, 'ADSW', 'EC4Y0HQ'), ('EC4Y 0HQ'::postcode, 'AD', 'EC4Y'), ('EC4Y 0HQ'::postcode, 'SW', '0HQ'), ('EC4Y 0HQ'::postcode, 'A', 'EC'), ('EC4Y 0HQ'::postcode, 'D', '4Y'), ('EC4Y 0HQ'::postcode, 'S', '0'), ('EC4Y 0HQ'::postcode, 'W', 'HQ'), ('EC4Y 0HQ'::postcode, ' AD SW ', ' EC4Y 0HQ '), ('EC4Y 0HQ'::postcode, '-AD SW-', '-EC4Y 0HQ-'), ('EC4Y 0HQ'::postcode, '', ''), ('EC4Y 0HQ'::postcode, 'test', 'test'), ('EC4Y 0HQ'::postcode, E'A\nD\nS\nW', E'EC\n4Y\n0\nHQ'), ('EC4Y 0HQ'::postcode, 'ADAD', 'EC4YEC4Y'), ('EC4Y 0HQ'::postcode, 'AA', 'ECEC'), ('EC4Y 0HQ'::postcode, 'A A', 'EC EC'), ('EC4Y 0HQ'::postcode, ' D D ', ' 4Y 4Y '), ('EC4Y 0HQ'::postcode, 'WW', 'HQHQ'), ('EC4Y 0HQ'::postcode, 'WSW', 'HQ0HQ'), ('SW1A 1AA'::postcode, 'W', 'AA'), ('BX5 5AT'::postcode, 'DD', '55'), ('BX5 5AT'::postcode, 'AD SW', 'BX5 5AT'), ('BX5 5AT'::postcode, 'ADSW', 'BX55AT'), ('BX5 5AT'::postcode, '.ADSW.ADSW.', '.BX55AT.BX55AT.'), ('G58 1SB'::postcode, 'ADSW', 'G581SB'), ('G58 1SB'::postcode, 'AD SW', 'G58 1SB'), ('G58 1SB'::postcode, 'AA', 'GG'), ('G58 1SB'::postcode, 'SWAAD', '1SBGG58'), ('G58 1SB'::postcode, '.SWAAD-', '.1SBGG58-') ) AS sample (code, format, expect) ORDER BY to_char(code, format) = expect ASC code | format | out | pass ----------+-------------+-----------------+------ EC4Y 0HQ | AD SW | EC4Y 0HQ | t EC4Y 0HQ | ADSW | EC4Y0HQ | t EC4Y 0HQ | ADSW | EC4Y0HQ | t EC4Y 0HQ | AD | EC4Y | t EC4Y 0HQ | SW | 0HQ | t EC4Y 0HQ | A | EC | t EC4Y 0HQ | D | 4Y | t EC4Y 0HQ | S | 0 | t EC4Y 0HQ | W | HQ | t EC4Y 0HQ | AD SW | EC4Y 0HQ | t EC4Y 0HQ | -AD SW- | -EC4Y 0HQ- | t EC4Y 0HQ | | | t EC4Y 0HQ | test | test | t EC4Y 0HQ | A +| EC +| t | D +| 4Y +| | S +| 0 +| | W | HQ | EC4Y 0HQ | ADAD | EC4YEC4Y | t EC4Y 0HQ | AA | ECEC | t EC4Y 0HQ | A A | EC EC | t EC4Y 0HQ | D D | 4Y 4Y | t EC4Y 0HQ | WW | HQHQ | t EC4Y 0HQ | WSW | HQ0HQ | t SW1A 1AA | W | AA | t BX5 5AT | DD | 55 | t BX5 5AT | AD SW | BX5 5AT | t BX5 5AT | ADSW | BX55AT | t BX5 5AT | .ADSW.ADSW. | .BX55AT.BX55AT. | t G58 1SB | ADSW | G581SB | t G58 1SB | AD SW | G58 1SB | t G58 1SB | AA | GG | t G58 1SB | SWAAD | 1SBGG58 | t G58 1SB | .SWAAD- | .1SBGG58- | t (30 rows)