SQL REPLACE上的奇怪输出
时间:2020-03-06 14:37:25 来源:igfitidea点击:
我在SQL视图中使用REPLACE从属性编号中删除空格。该功能的设置类似于此REPLACE(pin,'',))。在绿屏上,查询看起来很好。在其他任何情况下,我们都将获取字段中字符的十六进制值。我确定这是一种编码,但是如何解决?
这是我用来创建视图的语句:
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
更新:我在下面发布了答案。
解决方案
尝试使用NULL而不是空字符串。即REPLACE(RCAPIN,'',NULL)
我们最终使用了concat和substring来获得我们想要的结果。
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
这里的问题可能是我们认为该字段中的空白字符实际上是其他一些不可打印的字符。
我们可以使用以下SQL查看什么ASCII字符在第4个位置:
select ascii(substr(RCAPIN,4,1)) FROM YOUR-TABLE
然后,我们将能够对该字符使用替换而不是空格:
select replace(RCAPIN,chr(9)) FROM YOUR-TABLE