SQL REPLACE 上的奇怪输出
Posted
技术标签:
【中文标题】SQL REPLACE 上的奇怪输出【英文标题】:Weird Output on SQL REPLACE 【发布时间】:2008-09-23 20:02:48 【问题描述】:我在 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
更新:我在下面发布了答案。
【问题讨论】:
【参考方案1】:我们最终使用 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
【讨论】:
【参考方案2】:这里的问题可能是您认为该字段中的空白字符实际上是其他一些不可打印的字符。
您可以使用以下 SQL 来查看第 4 位的 ASCII 字符是什么:
SELECT ascii(substr(RCAPIN,4,1))
FROM YOUR-TABLE
那么您就可以使用替换该字符而不是空格:
SELECT replace(RCAPIN,chr(9))
FROM YOUR-TABLE
【讨论】:
【参考方案3】:尝试使用 NULL 而不是空字符串。即替换(RCAPIN,'',NULL)
【讨论】:
以上是关于SQL REPLACE 上的奇怪输出的主要内容,如果未能解决你的问题,请参考以下文章