繁体   English   中英

如果需要,在SQL语句DB2中将零附加到值

[英]Append a zero to value if necessary in SQL statement DB2

我有一个复杂的SQL语句,我需要根据联接匹配两个表。 复杂查询的初始部分具有一个位置号,该位置号作为Smallint存储在表中,而第二个表中的存储号则作为CHAR(4)存储。 我已经能够将smallint强制转换为char(4),如下所示:

CAST(STR_NBR AS CHAR(4)) AND LOCN_NBR

问题是,因为Smallint抑制前导“ 0”,所以联接从LEFT OUTER JOIN的右侧返回空值。

Table set A(Smallint)             Table Set B (Char(4))
|   96     |                      |  096     |
|   97     |                      |  097     |
|   99     |                      |  099     |
|  100     |  <- These return  -> |  100     |
|  101     |  <- These return  -> |  101     |
|  102     |  <- These return  -> |  102     |

我需要添加make以便它们全部返回,但是由于它是在join语句中,您如何在某些情况下而不是在其他情况下在开头添加零?

尝试LPAD功能:

 LPAD(col,3,'0' ) 
SELECT RIGHT('0000' || STR_NBR, 4)
FROM TABLE_A

将表B的CHAR为tinyint也可以工作:

SELECT ...
FROM TABLE_A A
JOIN TABLE_B B
  ON A.num = CAST(B.txt AS TINYINT)

通过执行以下操作,我一直可以成功匹配它,以始终获得3位数字的位置号:

STR_NBR最初定义为SmallINT(2)LOCN_NO最初定义为Char(4)

SELECT ...
FROM TABLE_A AS A
JOIN TABLE_B AS B
  ON CAST(SUBSTR(DIGITS(A.STR_NBR),3,3)AS CHAR(4)) = B.LOCN_NO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM