我有一个表称为记录有几列,其中之一是从代表电话号码的phone。我可以运行此查询来查看不同的电话号码:mysql查询没有给出正确的结果
SELECT DISTINCT fromphone
FROM records
它显示不同的电话号码。
但是,如果我运行此查询:
SELECT *
FROM records
WHERE fromphone = '123-456-7890'
其中fromphone是在表中的电话号码,没有结果得到恢复。
我有一个表称为记录有几列,其中之一是从代表电话号码的phone。我可以运行此查询来查看不同的电话号码:mysql查询没有给出正确的结果
SELECT DISTINCT fromphone
FROM records
它显示不同的电话号码。
但是,如果我运行此查询:
SELECT *
FROM records
WHERE fromphone = '123-456-7890'
其中fromphone是在表中的电话号码,没有结果得到恢复。
您确定在数据库表中有电话号码为123-456-7890
的记录吗?它可能有一些前导空间或尾随空间。
尝试使用LIKE
和%%
运营商,像这样做:
SELECT *
FROM records
WHERE fromphone LIKE '%123-456-7890%'
工作。不知道为什么/如何引导或尾随的空间在那里 – JPC 2010-09-01 18:49:40
最可能的情况是完全匹配的字符串,“123-456-7890”不在此列。尝试使用LIKE
而不是=
,以防万一有一些额外的空间或者导致等于不匹配电话号码的东西。
如果你前/后间隔,你可以使用TRIM()
SELECT *
FROM records
WHERE TRIM(fromphone) = '123-456-7890'
使用LIKE与领先的,如果你在记录表,因为有很多行的尾随通配符可以变得非常慢当你这样做时,MySQL必须进行全表扫描。
fromphone列的数据类型是什么?请发布您的表格架构。 – 2010-09-01 18:33:55
也许它的格式是你的电话号码存储,所以没有找到完全匹配。你为什么不尝试使用 - SELECT * FROM WHERE ATphone LIKE'%<全部或部分电话号码>%' – pavanred 2010-09-01 18:36:19
对于数据中的前后空格,你甚至可以尝试使用 - WHERE LTRIM(RTIRM(fromphone) )='123-456-7890' – pavanred 2010-09-01 18:45:59