Foxpro SELECT 查询找不到项目是大小写不正确

Foxpro SELECT query cant find item is case isnt correct

我有一个带有 CustomerName 字段的 table。我有一条记录,其中 CustomerName 是 'CustomerABC' 我的 select 查询如下:

   SELECT fieldA, fieldB, fieldC
from CustomersTable
WHERE CustomerName='CustomerABC'

这个returns记录但是如果大小写不对,就returns没什么。例如

    SELECT fieldA, fieldB, fieldC
from CustomersTable
WHERE CustomerName='customerabc'

不会产生任何结果。

当然,用户不应该知道他们正在搜索的记录的正确大小写!?有人可以帮我解决这个问题吗?

谢谢 约翰

默认情况下,FoxPro 的 === 运算符区分大小写,因此这会影响查询。但是,命令 SET COLLATE TO "GENERAL" 可用于更改行为,并允许 upper/lowercase 个字符在比较操作中匹配。

如果您想使用默认值并忽略大小写,请使用 UPPER() 或 LOWER() 函数转换字符串以进行比较。如果查询将在代码中执行(相对于命令 window 中的临时查询),将函数应用于比较的两侧通常是个好主意,除非您确定 table 以某种方式格式化。

SELECT fieldA, fieldB, fieldC
from CustomersTable
WHERE UPPER(CustomerName)=UPPER('customerabc')

此外,在使用字符串比较时,请考虑 SET EXACTSET ANSI 设置的影响,因为它们控制填充字符串和不同长度字符串的行为。

我有时用...

ALLTRIM(UPPER(CustomerName)) == UPPER('customerabc') 

... 或者,如果我尝试匹配变量或其他字段,我将使用 ...

ALLTRIM(UPPER(CustomerName)) == ALLTRIM(UPPER(SomeOtherField))

...只是为了确保我得到完全匹配。

感谢您的回复,看来我选择了一个明智的选择。在 UPPER 选择中(我的查询仍然非常快)我想我会坚持下去)。很高兴已经确认这就是 foxpro 的工作方式

再次感谢 约翰