Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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
Java sql where条件中的修剪值_Java_Sql_Db2_Conditional Statements_Where - Fatal编程技术网

Java sql where条件中的修剪值

Java sql where条件中的修剪值,java,sql,db2,conditional-statements,where,Java,Sql,Db2,Conditional Statements,Where,我在dbabc表中有一行记录,col1的值为“00012345” 要求:“00012345”等于“12345”,修剪前面的所有“0” 以下是我的sql查询: SELECT * FROM abc WHERE col1 = '12345'; 此查询不会返回任何结果,除非我将其更改为 SELECT * FROM abc WHERE col1 LIKE '%12345'; 但这将违反规则,例如,如果我在db中的值为“00912345”, 修剪前面的所有“0”后,“00912345”不等于“12345

我在db
abc
表中有一行记录,col1的值为“00012345”

要求:“00012345”等于“12345”,修剪前面的所有“0”

以下是我的sql查询:

SELECT * FROM abc WHERE col1 = '12345';
此查询不会返回任何结果,除非我将其更改为

SELECT * FROM abc WHERE col1 LIKE '%12345';
但这将违反规则,例如,如果我在db中的值为“00912345”, 修剪前面的所有“0”后,“00912345”不等于“12345”


请告知在进行比较时如何调整db值。

您可以尝试将
col1
转换为数字类型(例如
int
),然后检查是否相等:

SELECT *
FROM abc
WHERE CAST(col1 AS INT) = 12345

但是,如果
col1
正在存储数字数据,则最好将该列转换为数字类型,而不是
VARCHAR

您可以尝试将
col1
转换为数字类型(例如
int
),然后检查是否相等:

SELECT *
FROM abc
WHERE CAST(col1 AS INT) = 12345

但是,如果
col1
正在存储数字数据,那么将该列转换为数字类型可能比标记此DB2的
VARCHAR
更有意义,因此我假设您使用的是DB2语法。它是

select * from abc where cast(col1 as integer) = 12345

您已经标记了这个DB2,所以我假设您在使用DB2语法。它是

select * from abc where cast(col1 as integer) = 12345

根据您的版本和平台,您可以尝试以下操作:

 WHERE TRIM(L '0' FROM col1) = '12345'
或者这个:

WHERE LTRIM(col1, '0') = '12345'

根据您的版本和平台,您可以尝试以下操作:

 WHERE TRIM(L '0' FROM col1) = '12345'
或者这个:

WHERE LTRIM(col1, '0') = '12345'

在DB2V9上工作的解决方案

从abc中选择*,其中修剪(从col1中选择L“0”=“12345”


在DB2V10中,还可以使用在DB2V9上工作的LTRIM解决方案

从abc中选择*,其中修剪(从col1中选择L“0”=“12345”


在DB2V10中,也可以使用LTRIM。据我估计,OP使用了一个不正确的视角来解决这个问题

鉴于此,数据的存储方式是已知的,那么只需正确地组合文本以匹配关于数据存储方式的规则即可。从数据库中存储的每个值中删除前导零,或强制转换每个值以匹配用于选择的数字类型的值,这是一个糟糕的实现

我们[读者]最好假设文本来自用户输入,因此不能让任何用户重新格式化其输入以匹配数据库。因此,与用户正确地组合文本值不同,下一个最佳方法是程序员修改文本选择值,以匹配数据的存储方式

如果字符串值“12345”是指定的[user input]值,则可以在查询中组成一个表达式,只修改该文本值。这样做,而不是编写一个表达式来强制转换列和\或者也可能强制转换文本。例如,对于以下给定内容,下面进一步显示的一个可能的查询WHERE子句变体[使用SQL变量语法表示]应该会有所帮助:

create variable literal_replacement varchar(8) default '12345'
; /* used in place of actual literal string value as user input */
create table abc
( col1  char(08)
) /* My interpretation, as per typical, the OP offers no DDL */
;
create function col1_compare_val
( string_val varchar(08) )
returns char(08)
language sql
 return right( '00000000' concat string_val, 8 )
; /* possible example of encapsulating code to reformat user input */


据我估计,OP用不恰当的视角解决了这个难题

鉴于此,数据的存储方式是已知的,那么只需正确地组合文本以匹配关于数据存储方式的规则即可。从数据库中存储的每个值中删除前导零,或强制转换每个值以匹配用于选择的数字类型的值,这是一个糟糕的实现

我们[读者]最好假设文本来自用户输入,因此不能让任何用户重新格式化其输入以匹配数据库。因此,与用户正确地组合文本值不同,下一个最佳方法是程序员修改文本选择值,以匹配数据的存储方式

如果字符串值“12345”是指定的[user input]值,则可以在查询中组成一个表达式,只修改该文本值。这样做,而不是编写一个表达式来强制转换列和\或者也可能强制转换文本。例如,对于以下给定内容,下面进一步显示的一个可能的查询WHERE子句变体[使用SQL变量语法表示]应该会有所帮助:

create variable literal_replacement varchar(8) default '12345'
; /* used in place of actual literal string value as user input */
create table abc
( col1  char(08)
) /* My interpretation, as per typical, the OP offers no DDL */
;
create function col1_compare_val
( string_val varchar(08) )
returns char(08)
language sql
 return right( '00000000' concat string_val, 8 )
; /* possible example of encapsulating code to reformat user input */


为什么要将整数值存储在字符列中?可能存在重复?请使用如下语法从表1中选择*,其中LTRIM(名称,'0')='12345';为什么要将整数值存储在字符列中?可能存在重复?请使用如下语法从表1中选择*,其中LTRIM(名称,'0')='12345';