Oracle 内部联接上的不同列类型

Oracle 内部联接上的不同列类型,oracle,casting,case,Oracle,Casting,Case,所以我有两个表,我将用一个内部连接引用它们。在一侧,列类型为Number(3,0),另一侧为Varchar(150)。鉴于我不能更改数据类型,我必须将其转换为join。但是,在列为varchar的表上,字符串总是有3个数字,如“001”、“010”甚至“100”,等等 我的解决方案是在连接上使用Case,如下所示: TAB1.VARCHAR\u COL=Cast(Case…)上的内部联接TAB1,如VARCHAR(150) 案例必须将数字格式化为前缀为树数字的字符串,如上所述。 如果数据类似于“

所以我有两个表,我将用一个内部连接引用它们。在一侧,列类型为
Number(3,0)
,另一侧为
Varchar(150)
。鉴于我不能更改数据类型,我必须将其转换为join。但是,在列为varchar的表上,字符串总是有3个数字,如“001”、“010”甚至“100”,等等

我的解决方案是在连接上使用
Case
,如下所示:

TAB1.VARCHAR\u COL=Cast(Case…)上的内部联接TAB1,如VARCHAR(150)

案例
必须将数字格式化为前缀为树数字的字符串,如上所述。 如果数据类似于“1”,则案例的格式必须为“001”,如果数据类似于“10”,则将更改为“010”

请帮我处理
案例


编辑:varchar列有一些不是数字的值,因此强制转换它会显示错误。

似乎根本不需要
CASE

TAB1.VARCHAR_COL = TO_CHAR( TAB2.NUMBER_COL, '000' )

似乎根本不需要
案例

TAB1.VARCHAR_COL = TO_CHAR( TAB2.NUMBER_COL, '000' )

为什么不换个方向,把varchar列转换成一个数字呢?哦,我忘了解释这个了。因为有些值不是数字。所以cast抛出一个错误。这些表中有多少行?连接不同数据类型的危险在于,如果有希望使用索引,它可能会在转换后的列上。为什么不换个方向,将varchar列转换为一个数字呢?哦,我忘了解释这一点。因为有些值不是数字。所以cast抛出一个错误。这些表中有多少行?连接不同数据类型的危险在于,如果有希望使用索引,它可能会出现在转换的列上。假设TAB2.NUMBER\u COL是主键。将此值强制转换为_CHAR是否会否定此列上的索引?@Nitax:这将阻止对TAB2.NUMBER_COL执行索引唯一扫描或范围扫描。它不一定会阻止索引以其他方式使用,例如索引完全扫描。可以根据连接中使用的表达式创建基于函数的索引。假设TAB2.NUMBER\u COL是主键。将此值强制转换为_CHAR是否会否定此列上的索引?@Nitax:这将阻止对TAB2.NUMBER_COL执行索引唯一扫描或范围扫描。它不一定会阻止索引以其他方式使用,例如索引完全扫描。可以根据联接中使用的表达式创建基于函数的索引。