Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何查找包含小写字母的值的行_Sql_Mysql - Fatal编程技术网

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

Sql 如何查找包含小写字母的值的行,sql,mysql,Sql,Mysql,我正在寻找一个SQL查询,该查询提供ColumnX包含任何小写字母的所有行(例如“1234AA5789”)。大写字母也是一样。我不是MySQL方面的专家,我建议您看看REGEXP mysql> SELECT '1234aaaa578' REGEXP '^[a-z]'; SELECT * FROM MyTable WHERE ColumnX REGEXP '^[a-z]'; 这应该适用于像åäøæï这样的有趣角色。您可能需要为表使用特定于语言的utf-8排序规则。在MS SQL serv

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

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

mysql> SELECT '1234aaaa578' REGEXP '^[a-z]';
SELECT * FROM MyTable WHERE ColumnX REGEXP '^[a-z]';

这应该适用于像åäøæï这样的有趣角色。您可能需要为表使用特定于语言的utf-8排序规则。

在MS SQL server中使用COLLATE子句

SELECT Column1
FROM Table1
WHERE Column1 COLLATE Latin1_General_CS_AS = 'casesearch'
添加
COLLATE Latin1\u General\u CS\u AS
会使搜索区分大小写

SQL Server安装的默认排序规则
SQL\u Latin1\u General\u CP1\u CI\u AS
不区分大小写

要永久更改任何表的任何列的排序规则,请运行以下查询

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(20)
COLLATE Latin1_General_CS_AS
要了解任何表的列排序规则,请运行以下存储过程

EXEC sp_help DatabaseName
资料来源:

这将使搜索区分大小写


编辑

如“和”中所述,任何人都面临以下排序问题

COLLATE Latin1_General_CS_AS

应首先检查其SQL server、各自的数据库和相关列;并将默认排序规则与查询表达式一起传递。可以找到排序规则列表。

以小写搜索所有行

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

谢谢

在Posgresql中,您可以使用
~

例如,您可以搜索所有具有
列a
且包含任何小写字母的行

SELECT *
FROM Test
WHERE col1 
LIKE '%[abcdefghijklmnopqrstuvwxyz]%'
collate Latin1_General_CS_AS
从列a'[a-z]'所在的表中选择*

您可以根据需要修改正则表达式

关于Sql,请参见


我必须将二进制文件添加到ColumnX中,以获得区分大小写的结果


这是我为utf8编码的表和utf8\u unicode\u ci列所做的,这两个列似乎并没有完全发布:

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

我做了一些类似的事情来找出小写字母

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

从逻辑上讲,Rohit的解决方案应该是有效的,但事实并非如此。我认为SQLManagementStudio在尝试优化时搞砸了

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

SELECT [ExternalId]
FROM [EquipmentSerialsMaster] where LOWER('0'+[ExternalId]) COLLATE Latin1_General_CS_AS != '0'+[ExternalId]

不会与a-z以外的任何其他角色一起使用,如åääøøæï等,仅供参考。在决定字符类型时,REGEXP和RLIKE使用当前字符集。默认值为拉丁语1(cp1252西欧)。警告:REGEXP和RLIKE运算符以字节方式工作,因此它们不是多字节安全的,可能会对多字节字符集产生意外的结果。此外,这些运算符通过字节值比较字符,即使给定的排序规则将其视为相等,重音字符也可能不相等。它在不区分大小写的数据库中不起作用,必须添加Devraj Gadhavi answerIn MySQL 5.6中的COLLATE Latin1_General_CS_as,
Latin1_General_CS_as
导致错误
COLLATE latin1\u general\u cs
虽然有效。@kouton编辑了有关您所面临问题的详细信息。这在我的服务器的phpmyadmin中不起作用;我得到一个错误:未知排序规则:“Latin1\u General\u CS\u AS”。因此,我不得不使用一个更容易获得的排序规则,而不是“Latin1_General_CS”,它起了作用。@tormuto编辑了答案;并就您面临的问题添加了更多细节。虽然我不确定它是否适用于MySQL,但您可能会发现MySQL与MS SQL server提供的类似。这解决了我在将比较字符串更改为大写后的问题。这非常有趣。我用“%[a-z]%”尝试了这个方法,但它不起作用。我已经证实,把每个字母都拼出来是有效的。这是一个完美的答案。不需要反对排序规则,因为SQL Server不起作用。尝试了not equal to,但不确定这在SQL Server上是否有效,只在MySQL上进行了测试。
SELECT * FROM MyTable WHERE BINARY(ColumnX) REGEXP '^[a-z]';
SELECT *
FROM table
WHERE UPPER(column) != BINARY(column)
SELECT *
FROM YourTable
  where BINARY_CHECKSUM(lower(ColumnName)) = BINARY_CHECKSUM(ColumnName)
SELECT [ExternalId]
FROM [EquipmentSerialsMaster] where LOWER('0'+[ExternalId]) COLLATE Latin1_General_CS_AS != '0'+[ExternalId]