[英]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.