MYSQL问题 - > WHERE ...或

Ken*_*Ken 0 mysql

感谢这个网站上的一些帮助,我写了一个查询来查找任何行,其中'first'或'last'没有大写.每个条件本身都可以正常工作,但当使用OR组合成单个查询时,我不再检测"第一"列中的非大写条目 - 仅在"最后"列中.我哪里错了?谢谢.

SELECT first,last FROM main WHERE 

CONCAT( UPPER( SUBSTRING(first,1,1) ), SUBSTRING(first FROM 2) ) != first

OR

CONCAT( UPPER( SUBSTRING(last,1,1) ),  SUBSTRING(last FROM 2) ) != last

COLLATE latin1_general_cs
Run Code Online (Sandbox Code Playgroud)

Ike*_*ker 6

在这两个条件下你需要COLLATE:

SELECT first,last FROM main WHERE 
CONCAT( UPPER( SUBSTRING(first,1,1) ), SUBSTRING(first FROM 2) ) != first
COLLATE latin1_general_cs
OR
CONCAT( UPPER( SUBSTRING(last,1,1) ),  SUBSTRING(last FROM 2) ) != last
COLLATE latin1_general_cs
Run Code Online (Sandbox Code Playgroud)

或者,根据上述评论中的建议简化查询:

SELECT first,last FROM main WHERE 
UPPER( SUBSTRING(first,1,1))  != SUBSTRING(first,1,1)
COLLATE latin1_general_cs
OR
UPPER( SUBSTRING(last,1,1)) != SUBSTRING(last,1,1)
COLLATE latin1_general_cs
Run Code Online (Sandbox Code Playgroud)