Man kann da bestimmt auch eine Konvertierungsfunktion mit angeben, welche man für eine explizite Konvertierung nutzen kann.
In deiner Richtung sollte die Standardkonvertierung aber ausreichen.
Wenn
meineSpalte INTEGER
ist und
meineSpalte::VARCHAR
bzw.
CAST(meineSpalte AS VARCHAR)
funktioniert, oder wie auch immer ein CAST geht, dann kann man die manuelle Konvertierung weglassen.
Ansonsten ginge auch vorher ein UPDATE, wo alles "Ungültige" entfernt wird.
Aber eigentlich würde ich auch erwarten, daß bei unmöglicher Konvertierung (veränderte Inhalte, bzw. Datenverlust) ein Fehler geworfen wird.

Also z.B. auch bei VARCHAR(5) -> VARCHAR(10) = OK, aber VARCHAR(10) -> VARCHAR(5) = Fehler, wenn ein Text länger als 5 ist.
SQL-Code:
-- in PostgrSQL
ALTER TABLE [ ONLY ] name [ * ] ALTER [ COLUMN ] column [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]
SQL-Code:
ALTER TABLE meineTabelle
ALTER COLUMN meineSpalte
TYPE CHAR(40)
USING cast(meineSpalte AS CHAR(40)) -- upper(trim(substr(meineSpalte, 3, 5)))
entspricht
SQL-Code:
UPDATE meineTabelle
SET meineSpalte = cast(meineSpalte AS CHAR(40));
ALTER TABLE meineTabelle
ALTER COLUMN meineSpalte
TYPE CHAR(40);
Ein Therapeut entspricht 1024 Gigapeut.