注册 登录
编程论坛 VFP论坛

这两个语句差别在哪?

fdqzy 发布于 2021-12-12 11:59, 2477 次点击
程序代码:
create cursor b1 (mc1 c(5),mc c(3))
insert into b1 values ("aab","ab")
insert into b1 values ("abc","abc")
insert into b1 values ("acc","ac")
insert into b1 values ("bc","bc")
insert into b1 values ("A55","A5")


SELECT * FROM b1 WHERE ALLTRIM(mc1)<>ALLTRIM(mc)
SELECT * FROM b1 WHERE !ALLTRIM(mc1)==ALLTRIM(mc)
查询结果不同的原因在哪?
谢谢!
11 回复
#2
吹水佬2021-12-12 12:37
不相等
不是完全相等
#3
fdqzy2021-12-12 13:56
以下是引用吹水佬在2021-12-12 12:37:08的发言:

不相等
不是完全相等

后一个才是用于"完全不相等",对字符串"完全不相等"不能用"<>",是吗?
#4
吹水佬2021-12-12 14:51
是不是与 SET EXACT 有关,该命令不影响 SQL 命令
给个b1表看看
#5
sash2021-12-12 15:16
第二句的两个“=”号表示精确相等。所以两句语句分别表示:不相等和不精确相等,所以得到的结果是不一样的。如果第二句改写成:SELECT * FROM b1 WHERE !ALLTRIM(mc1)=ALLTRIM(mc),即减少一个等号,得到的结果就和第一句一样了。
#6
fdqzy2021-12-13 02:36
以下是引用吹水佬在2021-12-12 14:51:47的发言:

是不是与 SET EXACT 有关,该命令不影响 SQL 命令
给个b1表看看

就是查询有重复字符的记录
也就是5楼所讲的字符串比较中精确与否的表达

[此贴子已经被作者于2021-12-13 03:25编辑过]

#7
laowan0012021-12-13 08:21
xx1='ab  '
xx2='ab'
MESSAGEBOX(xx1=xx2)    && .T.
MESSAGEBOX(xx1<>xx2)    && .F.
MESSAGEBOX(xx1==xx2)    && .F.
#8
mywisdom882021-12-13 08:50
SET EXACT ON 后,2个语句就是一样的
在VFP中,我一般都是设置为 ON,这样,方便使用,毕竟别的MS SQL语句,= 是完全相等
#9
吹水佬2021-12-13 09:04
换个角度看是 = 与 == 的差别,明显也是 !(=) 与 !(==) 的差别
#10
星光悠蓝2021-12-13 11:43
我只知道相等和不相等,头一回听到“不完全相等”,真是孤陋寡闻。
#11
fdqzy2021-12-13 11:52
以下是引用mywisdom88在2021-12-13 08:50:50的发言:

SET EXACT ON 后,2个语句就是一样的
在VFP中,我一般都是设置为 ON,这样,方便使用,毕竟别的MS SQL语句,= 是完全相等

明白其中原因了,谢谢!
#12
吹水佬2021-12-13 11:55
以下是引用星光悠蓝在2021-12-13 11:43:50的发言:

我只知道相等和不相等,头一回听到“不完全相等”,真是孤陋寡闻。

编程语言与常规术语不同
如 x = x + 1 是合法成立的
1