Is there a non-trigger way to format data on INSERT/UPDATE?
When inserting / updating some column, I want to convert it to lowercase and change dashes to colons. So that,
Without using triggers, is it possible to do this at the table definition level, similar to how a
CHECK constraint is used?
Sure, as long as you control the INSERT statement, in which case this will do:
INSERT INTO t(a, b) VALUES (111, replace(lower(:myparam),'-',':'));
If however you don't, but want to check/adjust an inserted value AFTER the INSERT happened and without running a next query, well, the one and only SQL mechanism for that is a Trigger, so if you won't allow that, then no - you cannot do so.
You can make the text contents of the column case-insensitive by declaring the column to have the NOCASE collating sequence:
create table x ( x text collate nocase );
column x still contains whatever you put into it exactly, but ASCII text will be case insensitive for the purposes of comparison (which includes indexing).
So for replacement of characters within a field, no. You must do that yourself.