MySQL使用char_length()检查一系列字符而不给出结果

时间:2015-05-13 21:47:35

标签: mysql sql mysql-workbench

SELECT FirstName
       , LastName
       , Phone
       , balance 
  FROM customers 
 WHERE balance > 0 
   AND phone != '' 
   AND char_length(phone) > 10 
   AND char_length(phone) < 11;

这不会导致结果,但如果我这样做

SELECT FirstName
       , LastName
       , Phone
       , balance  
  FROM access_ayyaz_test.customers  
 WHERE balance > 0  
   AND phone != ''  
   AND char_length(phone) > 10;

SELECT FirstName
       , LastName
       , Phone
       , balance  
  FROM customers 
 WHERE balance > 0  
   AND phone != ''  
   AND char_length(phone) < 11;

他们自己而不是一起给出结果。那我该怎么检查范围呢?

2 个答案:

答案 0 :(得分:0)

第一个查询不会返回任何内容,因为没有任何内容可以匹配:

 AND char_length(phone) > 10 
 AND char_length(phone) < 11;

尝试稍微改变你的范围:

SELECT FirstName
   , LastName
   , Phone
   , balance 
FROM customers 
WHERE balance > 0 
AND char_length(phone) >=10 
AND char_length(phone) <=11

现在,您可以让人们拥有平衡和正确的电话号码长度。

答案 1 :(得分:0)

查询

SELECT FirstName
       , LastName
       , Phone
       , balance  
  FROM access_ayyaz_test.customers  
 WHERE balance > 0  
   AND phone != ''  
   AND char_length(phone) > 10;

SELECT FirstName
       , LastName
       , Phone
       , balance  
  FROM customers 
 WHERE balance > 0  
   AND phone != ''  
   AND char_length(phone) < 11;

正在检查长度大于10且小于11的电话号码的记录。让这些查询返回值并不会使条件char_length(phone) > 10 AND char_length(phone) < 11成立。

可能会有记录显示电话号码的长度为12,13或14,这使得条件char_length(phone) > 10为真,并返回满足该条件的记录。

同样,可能会有记录显示电话号码的长度小于11,并使条件char_length(phone) < 11为真,并返回满足该条件的记录。

编辑:根据您的评论,如果您要查找电话号码长度介于10到12之间的记录,则不需要两个过滤器,例如

 AND char_length(phone) > 10 
 AND char_length(phone) < 12

您可以简单地使用AND char_length(phone) = 11