Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将一个数字与具有前导零的VARCHAR2类型数字进行比较?_Sql_Oracle_Numbers_Type Conversion_Varchar - Fatal编程技术网

Sql 如何将一个数字与具有前导零的VARCHAR2类型数字进行比较?

Sql 如何将一个数字与具有前导零的VARCHAR2类型数字进行比较?,sql,oracle,numbers,type-conversion,varchar,Sql,Oracle,Numbers,Type Conversion,Varchar,我试图比较数据库中两个不同表中的两列。一列的类型为VARCHAR2(4个字符),另一列的类型为DECIMAL。虽然我将这些列作为字符串拉入JAVA进行比较,但我遇到了以下问题: 列(十进制)中的元素为:123456789 比较列(varchar)的元素为:0123、0456、0789 因此,我想知道是否有一种方法可以在从数据库中提取前缀0时将其删除(类似于某种TRIM0()),从而使两列中的元素相同 我试图避免在JAVA中处理此列以提高性能。您可以使用LTRIM从varchar编号中删除前导零:

我试图比较数据库中两个不同表中的两列。一列的类型为VARCHAR2(4个字符),另一列的类型为DECIMAL。虽然我将这些列作为字符串拉入JAVA进行比较,但我遇到了以下问题:

列(十进制)中的元素为:123456789

比较列(varchar)的元素为:0123、0456、0789

因此,我想知道是否有一种方法可以在从数据库中提取前缀0时将其删除(类似于某种TRIM0()),从而使两列中的元素相同


我试图避免在JAVA中处理此列以提高性能。

您可以使用LTRIM从varchar编号中删除前导零:

select ltrim( '0001234', '0' ) from dual;

但我建议重新审视您的设计,并将数字与数字进行比较。

您可以尝试强制转换,但我相信这会影响查询的性能。如果一封信中有一封信,可能会引起问题

where cast(column1 as unsigned) = cast(column2 as unsigned)
(像某种TRIM0())这样两列中的元素都是相同的

您的要求是数据类型转换,而不是字符串操作。

元素可能看起来相似,但重要的是数据类型<代码>'123'和
123
不一样。它们看起来很相似,但数据类型不同

不要使用LTRIM,因为它会返回一个字符串,您必须再次将其转换为数字,以避免隐式数据类型转换。返回字符串,然后再次使用to_NUMBER将其转换为NUMBER是没有意义的

正确而有效的方法是使用到_NUMBER。它只需一步就能把它转换成数字

比如说,

SQL> SELECT to_number('00123') num FROM dual;

       NUM
----------
       123

SQL> SELECT * FROM dual WHERE to_number('00123') = 123;

D
-
X

另一方面,如果您确定要处理的列始终需要一个数字,则必须在设计级别将其修复。将数字存储为字符类型是一个设计缺陷,除非有特定的业务需要。

如果比较两个整数,您的问题将得到解决。我建议您将VARCHAR传输到intI,也就是说,在这两个位置使用相同的数字数据类型!LTRIM(列,'0')@jarlh在这里使用
LTRIM
没有意义。字符串上的LTRIM将返回一个字符串。只需使用
到_NUMBER
。将其转换为数字的较短版本是使用
到_NUMBER
。虽然您的做法是正确的,但主要要求是处理数据类型转换而不是字符串操作。要求是关于数据类型转换,而不是字符串操作。所以,你的答案并不完全符合要求<字符串的code>LTRIM将返回一个字符串。所以,您最终会将字符串与数字进行比较。依赖隐式数据类型转换是一种性能开销。您可以使用
到\u NUMBER
一步完成。