在我的估计中,OP以不正确的视角解决了难题。
考虑到数据的存储方式是已知的,那么只需正确组合文字以匹配关于如何存储数据的规则。从数据库中存储的每个值中修剪前导零,或者转换每个值以匹配数字类型的值以供选择是IMO,这是一个糟糕的实现。
我们[读者]可能最好假设的文字会根据用户输入现身,因此责任不能被放置在任何用户(S)重新格式化它们的输入相匹配的数据库。因此,不是用户正确组成文字值,下一个最好的方法是让程序员修改文字选择值以匹配数据的存储方式。
如果字符串值'12345'是指定的[用户输入]值,那么可以在查询中编写一个表达式,该表达式可修改只有该字面值。这可以做,而不是组成一个表达式来投射列和\或可能也投射文字。例如,下面的吉文斯,在可能的查询的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 */
WHERE col1 = repeat('0', 8 - length(literal_replacement)) concat literal_replacement
WHERE col1 = (lpad(literal_replacement, 8, '0'))
WHERE col1 = right('00000000' concat literal_replacement , 8)
WHERE col1 = col1_compare_val(literal_replacement)
的[删除导致可能的复制0](http://stackoverflow.com/questions/9091297/remove-leading-zeros) – Damirchi
为什么你在字符列中存储整数值? – jarlh
使用下面的语法 从table_1中选择*其中LTRIM(名称,'0')='12345'; – Jack