DB2 SELECT语句未返回预期行的问题求助
查询无结果的原因及修复方案
问题分析
- 语法错误:你的查询语句存在两处语法问题:
var char是拼写错误,正确写法应为varchar;- 最后一个
cast函数缺少闭合的右括号),这会导致查询无法正常执行(若实际执行语句无此错误可忽略)。
- 数值转字符串的隐式丢失:
cast(080138738 as varchar(10))中,080138738作为数字字面量,数据库会自动忽略开头的0,转换后的字符串实际是'80138738',而非你预期的'080138738'。 - 字符串比较逻辑不匹配:表中
pkey值为'08013878',与转换后的'80138738'做字符串比较时,第一个字符'0'小于'8',因此'08013878' >= '80138738'的条件不成立,不会返回结果。
修复方案
- 修正语法错误:将
var char改为varchar,补上cast函数的右括号,修正后的基础语句:
select * from tbl1 as tbl1 where tbl1.pkey >= cast(080138738 as varchar(10)) and tbl1.pkey <= cast(080138738 as varchar(10));
- 直接使用字符串字面量:避免数字转字符串丢失开头0的问题,直接用带引号的字符串作为条件值:
select * from tbl1 as tbl1 where tbl1.pkey >= '080138738' and tbl1.pkey <= '080138738';
- 核对匹配范围:若表中
pkey是8位的'08013878',而你查询的是9位的'080138738',两者长度不同,字符串比较必然不相等。请确认是否为输入笔误,或是调整范围以包含目标值。
内容的提问来源于stack exchange,提问作者ebi rezaei
相关产品推荐
相关产品推荐

