感谢这个网站上的一些帮助,我写了一个查询来查找任何行,其中'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)
在这两个条件下你需要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)