| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2082 人关注过本帖
标题:VFP数据对比问题,几乎同样的语句 ,出现了不同的结果(已上次测试数据)
只看楼主 加入收藏
hjlali
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-12-23
结帖率:100%
收藏
 问题点数:0 回复次数:22 
VFP数据对比问题,几乎同样的语句 ,出现了不同的结果(已上次测试数据)
两个对比语句,唯一的差别就是其中一个多了alltrim,不知道为什么结果会不同?原理是什么,谁能说的清楚,非常感谢!!
SELECT * from f1 where lxfs NOT in  (SELECT lxfs from ys1) ;             &&出现2个不同记录
SELECT * from f1 where alltrim(lxfs) NOT in  (SELECT lxfs from ys1) ;  &&没有不同记录


对比表数据表.zip (500 Bytes)


[此贴子已经被作者于2021-8-21 12:54编辑过]

搜索更多相关主题的帖子: 语句 结果 对比 不同 数据 
2021-08-21 12:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
试试:
SELECT * from f1 where VAL(lxfs) NOT in  (SELECT VAL(lxfs) from y1)

坚守VFP最后的阵地
2021-08-21 13:32
hjlali
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-12-23
收藏
得分:0 
以下是引用sdta在2021-8-21 13:32:50的发言:

试试:
SELECT * from f1 where VAL(lxfs) NOT in  (SELECT VAL(lxfs) from y1)

按这个结果和不加alltrim是一样的,能说说这几个语句的区别到底在哪里吗?

喜欢VFP,就要学懂弄通!
2021-08-21 13:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用hjlali在2021-8-21 13:36:52的发言:


按这个结果和不加alltrim是一样的,能说说这几个语句的区别到底在哪里吗?

测试结果不一定是包含关系,比较是按字段宽度的内容比较,如果(被)比较字段(如F1表的LXFS)用了ALLTRIM(),应该是包含关系。自己可以测试下
SELECT * from f1 where lxfs NOT in  (SELECT lxfs from y1) && 精确比较,按字段宽度中的内容比较
SELECT * from f1 where alltrim(lxfs) NOT in  (SELECT lxfs from y1) && 非精确比较
SELECT * from f1 where lxfs NOT in  (SELECT alltrim(lxfs) from y1) && 精确比较

[此贴子已经被作者于2021-8-21 13:52编辑过]


坚守VFP最后的阵地
2021-08-21 13:46
hjlali
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-12-23
收藏
得分:0 
以下是引用sdta在2021-8-21 13:46:03的发言:


测试结果不一定是包含关系,比较是按字段宽度的内容比较,如果(被)比较字段(如F1表的LXFS)用了ALLTRIM(),应该是包含关系。自己可以测试下
SELECT * from f1 where lxfs NOT in  (SELECT lxfs from y1) && 精确比较,按字段宽度中的内容比较
SELECT * from f1 where alltrim(lxfs) NOT in  (SELECT lxfs from y1) && 非精确比较
SELECT * from f1 where lxfs NOT in  (SELECT alltrim(lxfs) from y1) && 精确比较

好像是你说的这样的,我再验证下,之前你VAL函数其实就是把字符转成了数字进行比较,转换后,相当于去掉了空格,这个应该也是精准对比吧?
经过测试发现,精确比较的时候好像是自动忽略了空格的长度的,也就是说两个比较的字段即使设置的字段宽度不一样,用不用alltrim,只要字段内容一样,最后对比结果相同。
另外,请教个问题:ALLTRIM(lxfs,0h0920) 这个函数中的参数0h0920是什么意思?查不到资料。


[此贴子已经被作者于2021-8-21 15:39编辑过]


喜欢VFP,就要学懂弄通!
2021-08-21 14:37
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
0h0920 16进制还原为10进制应该是2336

[此贴子已经被作者于2021-8-21 15:58编辑过]


坚守VFP最后的阵地
2021-08-21 15:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
0h0920==chr(0x09)+chr(0x20)
2021-08-21 16:10
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
这个是什么意思,in 与 not in 结果一样?
程序代码:
CREATE CURSOR f1 (lxfs C(10))
INSERT INTO f1 VALUES ("123")
CREATE CURSOR y1 (lxfs C(10))
INSERT INTO y1 VALUES ("123456")

SELECT * from f1 where lxfs in (SELECT lxfs from y1)      && .T.
SELECT * from f1 where lxfs NOT in (SELECT lxfs from y1)  && .T.
2021-08-21 16:12
hjlali
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-12-23
收藏
得分:0 
以下是引用sdta在2021-8-21 15:54:50的发言:

0h0920 16进制还原为10进制应该是2336

语句:SELECT * from f1 where ALLTRIM(lxfs) NOT in  (SELECT lxfs from y1)

对比又有新发现,看图,这个怎么解释啊?既不包含又不精确对比。。。搞不懂了,对比数据附后。请两位大侠帮忙分析分析
图片附件: 游客没有浏览图片的权限,请 登录注册


对比表new.rar (460 Bytes)


[此贴子已经被作者于2021-8-21 16:21编辑过]


喜欢VFP,就要学懂弄通!
2021-08-21 16:20
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
“8027878390”与“08027878390”怎比也是.F.
2021-08-21 16:42
快速回复:VFP数据对比问题,几乎同样的语句 ,出现了不同的结果(已上次测试数据 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020128 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved