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

时间:2012-09-07 19:04:58

标签: sql 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以便它们都返回,但是因为它在连接语句中,你如何在开头和某些条件中而不是在其他条件中添加零?

3 个答案:

答案 0 :(得分:2)

尝试LPAD功能:

 LPAD(col,3,'0' ) 

答案 1 :(得分:2)

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)

答案 2 :(得分:1)

通过执行以下操作,我能够成功地将其匹配以始终获得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