De manier waarop is afhankelijk van het platform dat je gebruikt: MySQL, Oracle, MSSQL, Postgres, Access of iets anders. Aangezien de meeste sql vragen hier over MySQL gaan zal ik deze als voorbeeld gebruiken, als je iets anders zal het principe hetzelfde zijn en kun je de vergelijkbare variant gebruiken.
Wat je wil kan in een paar stappen die allemaal wel in 1 statement te plaatsen zijn:
- de huidige opknippen in eerste 4 posities en laatste 2
- laatste 2 posities omzetten naar hoofdletters
- postcode weer aan elkaar plakken met een spatie ertussen
1) Dit kan met behulp van SUBSTR()
[sql]test-> SELECT SUBSTR( '1234ab', 1, 4 ) cijfers
-> , SUBSTR( '1234ab', 5, 2 ) letters
-> FROM dual;
+---------+---------+
| cijfers | letters |
+---------+---------+
| 1234 | ab |
+---------+---------+
1 row in set (0.04 sec)[/sql]
2) Omzetten naar hoofdletters doe je met UPPER()
[sql]test-> SELECT SUBSTR( '1234ab', 1, 4 ) cijfers
-> , UPPER( SUBSTR( '1234ab', 5, 2 ) ) letters
-> FROM dual;
+---------+---------+
| cijfers | letters |
+---------+---------+
| 1234 | AB |
+---------+---------+
1 row in set (0.01 sec)[/sql]
3) Dan weer aan elkaar plakken met CONCAT()
[sql]test-> SELECT CONCAT( SUBSTR( '1234ab', 1, 4 )
-> , ' '
-> , UPPER( SUBSTR( '1234ab', 5, 2 ) )
-> ) postcode
-> FROM dual;
+----------+
| postcode |
+----------+
| 1234 AB |
+----------+
1 row in set (0.00 sec)[/sql]
In een insert statement zal dat er zo uitzien:
[sql]INSERT INTO nieuwetabel
( postcodenieuw )
SELECT CONCAT( SUBSTR( postcodeoud, 1, 4 )
, ' '
, UPPER( SUBSTR( postcodeoud, 5, 2 ) )
) postcode
FROM oudetabel;[/sql]