Sortie étrange sur SQL REPLACE
-
02-07-2019 - |
Question
J'utilise REPLACE dans une vue SQL pour supprimer les espaces d'un numéro de propriété. La fonction est configurée comme ceci REPLACE (pin, '', ''). Sur l'écran vert, la requête semblait correcte. Dans toute autre chose, nous obtenons les valeurs hexadécimales des caractères du champ. Je suis sûr que c'est un problème d'encodage, mais comment puis-je résoudre ce problème?
Voici la déclaration que j'ai utilisée pour créer la vue:
CREATE VIEW RLIC2GIS AS SELECT REPLACE(RCAPIN, ' ', '') AS
RCAPIN13 , RLICNO, RONAME, ROADR1, ROADR2, ROCITY, ROSTAT, ROZIP1,
ROZIP2, RGRID, RRADR1, RRADR2, RANAME, RAADR1, RAADR2, RACITY,
RASTAT, RAZIP1, RAZIP2, REGRES, RPENDI, RBLDGT, ROWNOC, RRCODE,
RROOMS, RUNITS, RTUNIT, RPAID, RAMTPD, RMDYPD, RRFUSE, RNUMCP,
RDATCP, RINSP, RCAUKY, RCAPIN, RAMTYR, RYREXP, RDELET, RVARIA,
RMDYIN, RDTLKI, ROPHN1, ROPHN2, ROCOM1, ROCOM2, RAPHN1, RAPHN2,
RACOM1, RACOM2, RNOTES FROM RLIC2
MISE À JOUR: j'ai posté la réponse ci-dessous.
La solution
Nous avons finalement utilisé concat et sous-chaîne pour obtenir les résultats souhaités.
CREATE VIEW RLIC2GIS AS
SELECT CONCAT(SUBSTR(RCAPIN,1,3),CONCAT(SUBSTR(RCAPIN,5,2),
CONCAT(SUBSTR(RCAPIN,8,2), CONCAT(SUBSTR(RCAPIN,11,3),
SUBSTR(RCAPIN, 15,3))))) AS CAPIN13, RLICNO, RONAME, ROADR1,
ROADR2, ROCITY, ROSTAT, ROZIP1, ROZIP2, RGRID, RRADR1, RRADR2,
RANAME, RAADR1, RAADR2, RACITY, RASTAT, RAZIP1, RAZIP2, REGRES,
RPENDI, RBLDGT, ROWNOC, RRCODE, RROOMS, RUNITS, RTUNIT, RPAID,
RAMTPD, RMDYPD, RRFUSE, RNUMCP, RDATCP, RINSP, RCAUKY, RCAPIN,
RAMTYR, RYREXP, RDELET, RVARIA, RMDYIN, RDTLKI, ROPHN1, ROPHN2,
ROCOM1, ROCOM2, RAPHN1, RAPHN2, RACOM1, RACOM2, RNOTES FROM RLIC2
Autres conseils
Le problème ici pourrait être que ce que vous pensez être le caractère vide dans ce champ est en réalité un autre caractère non imprimable.
Vous pouvez utiliser le code SQL suivant pour déterminer le caractère ASCII en 4ème position:
select ascii(substr(RCAPIN,4,1))
FROM YOUR-TABLE
Vous pourrez alors utiliser un remplacement pour ce caractère au lieu de l'espace vide:
select replace(RCAPIN,chr(9))
FROM YOUR-TABLE
Essayez d’utiliser NULL plutôt qu’une chaîne vide. i.e. REMPLACER (RCAPIN, '', NULL)