如何查找具有包含小写字母的值的行


72

我正在寻找一个SQL查询,该查询可为我提供ColumnX包含任何小写字母(例如“ 1234aaaa5789”)的所有行。大写相同。

Answers:


102
SELECT * FROM my_table 
WHERE UPPER(some_field) != some_field

这应该适用于像åäöøüææï这样的有趣人物。您可能需要为表使用特定于语言的utf-8归类。


26
在不区分大小写的数据库中不起作用,必须从Devraj Gadhavi答案中添加COLLATE Latin1_General_CS_AS
Pawel Cioch 2014年

1
在MySQL 5.6中,Latin1_General_CS_AS引起了错误。COLLATE latin1_general_cs虽然工作。
kouton '16

@kouton编辑了我的答案,以详细了解您遇到的问题。
Devraj Gadhavi '16

46
SELECT * FROM my_table WHERE my_column = 'my string'
COLLATE Latin1_General_CS_AS

这将使搜索区分大小写。


编辑

正如指出kouton在这里评论tormuto在这里评论凡面临着以下问题整理

COLLATE Latin1_General_CS_AS

首先应检查其SQL Server,其各自的数据库和相关列的默认排序规则;并使用查询表达式传递默认排序规则。排序规则列表可以在这里找到。


这在我服务器的phpmyadmin中不起作用;我收到一个错误:未知归类:'Latin1_General_CS_AS'。因此,我不得不使用更多可用的排序规则来代替“ Latin1_General_CS”,并且它起作用了。
tormuto 16/09/14

@tormuto编辑了答案;并添加了有关您遇到的问题的更多详细信息。尽管我不确定它是否适用于MySQL,但您可能会发现与MS SQL Server提供的功能类似的MySQL功能。
Devraj Gadhavi

28
SELECT * FROM Yourtable 
WHERE UPPER([column_NAME]) COLLATE Latin1_General_CS_AS !=[Column_NAME]

12

用于搜索所有小写的行

SELECT *
FROM Test
WHERE col1 
LIKE '%[abcdefghijklmnopqrstuvwxyz]%'
collate Latin1_General_CS_AS

由于Manesh约瑟夫


在将比较字符串更改为大写字母之后,这解决了我的问题。
sanepete'7

这很有趣。我已经用'%[az]%'尝试了此操作,但这不起作用。我已经确认拼出每个字母都可以。
RPh_Coder

10

这是我对utf8编码的表和utf8_unicode_ci列执行的操作,这似乎并没有完全发布:

SELECT *
FROM table
WHERE UPPER(column) != BINARY(column)

4
这是完美的答案。无需与整理
邮件

在SQL Server上不起作用。尝试使用不等于<>
Anoopkumar,

不知道这是否适用于SQL Server,仅在MySQL上进行了测试。
martincarlin87

8

在MS SQL Server中使用COLLATE子句。

SELECT Column1
FROM Table1
WHERE Column1 COLLATE Latin1_General_CS_AS = 'casesearch'

添加COLLATE Latin1_General_CS_AS使搜索区分大小写。

SQL Server安装的默认排序规则SQL_Latin1_General_CP1_CI_AS不区分大小写。

要更改任何表的any列的排序规则,请在查询后永久运行。

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(20)
COLLATE Latin1_General_CS_AS

要了解任何表的列排序规则,请按照存储过程运行。

EXEC sp_help DatabaseName

来源:SQL SERVER –整理–区分大小写的SQL查询搜索


4

我已经做了类似的事情来找出小写字母。

SELECT *
FROM YourTable
  where BINARY_CHECKSUM(lower(ColumnName)) = BINARY_CHECKSUM(ColumnName)

3
mysql> SELECT '1234aaaa578' REGEXP '^[a-z]';

将与任何其他角色比AZ不行,像åäöøüæï等

1
仅供参考。REGEXP和RLIKE在确定字符类型时使用当前字符集。默认值为latin1(cp1252西欧)。警告REGEXP和RLIKE运算符以字节方式工作,因此它们不是多字节安全的,并且使用多字节字符集可能会产生意外结果。另外,这些运算符按字节值比较字符,即使给定的归类将它们视为相等,重音字符也可能不相等。
Elzo Valugi


1

我不是MySQL方面的专家,我建议您看一下REGEXP

SELECT * FROM MyTable WHERE ColumnX REGEXP '^[a-z]';


1

-对于Sql

SELECT *
FROM tablename
WHERE tablecolumnname LIKE '%[a-z]%';

0

从逻辑上讲,Rohit的解决方案应该有效,但没有成功。我认为SQL Management Studio在尝试优化时会搞砸。

但是通过在比较它们之前修改字符串,我可以得到正确的结果。这对我有用:

SELECT [ExternalId]
FROM [EquipmentSerialsMaster] where LOWER('0'+[ExternalId]) COLLATE Latin1_General_CS_AS != '0'+[ExternalId]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.