Da UTF16 ein variables Format ist (2 oder 4 Byte), funktioniert %subst da leider nicht.
Hier musst du einen Umweg über UCS2 (13488) machen (fix 2 Byte).

%subst(% UCS2(TEXT1:1:L))

Probiert habe ich das allerdings noch nicht.

UTF16 und auch UTF8 sollte nur als Import/Export-Datentyp verwendet werden.
UCS2 sollte bei der Datenhaltung und Programmierung verwendet werden.

Es wäre also besser, die Daten beim Select in eine UCS2-Variable zu lesen und dann eben auch per Update/Insert zu schreiben.

Variable Zeichensätze (UTF8, UTF16) sollten datenbanktechnisch auch als VARCHAR/VARGRAPHIC definiert und Leerzeichen am Ende immer abgeschnitten werden (Trim).
Es könnte nämlich sonst passieren, dass beim Schreiben die Daten zu lang werden.

Ich hatte da mal das Problem mit Oracle:

LagerNr varchar2(2)

varchar2 ist bei Oracle immer UTF8.

Leider kam der Anwender auf die Idee, das Lager "ÜL" zu nennen, für UTF8 werden aber 3-Byte benötigt. Und schon gabs SQL-Fehler!

Wenn man also mit UTF8 bzw. UTF16 arbeitet sollte man die 4 bzw. 2-fache Kapazität in der DB planen und die Eingabe entsprechend beschränken.