我正在寻找一个 SQL 查询,它给出了 ColumnX 包含任何小写字母的所有行(例如“1234aaaa5789”)。大写也一样。
mysql> SELECT '1234aaaa578' REGEXP '^[a-z]';
I'm not an expert on MySQL I would suggest you look at REGEXP.
REGEXP
SELECT * FROM MyTable WHERE ColumnX REGEXP '^[a-z]';
SELECT * FROM my_table WHERE UPPER(some_field) != some_field
This should work with funny characters like åäöøüæï. You might need to use a language-specific utf-8 collation for the table.
IN MS SQL server use the COLLATE clause.
SELECT Column1 FROM Table1 WHERE Column1 COLLATE Latin1_General_CS_AS = 'casesearch'
Adding COLLATE Latin1_General_CS_AS makes the search case sensitive.
COLLATE Latin1_General_CS_AS
Default Collation of the SQL Server installation SQL_Latin1_General_CP1_CI_AS is not case sensitive.
SQL_Latin1_General_CP1_CI_AS
To change the collation of the any column for any table permanently run following query.
ALTER TABLE Table1 ALTER COLUMN Column1 VARCHAR(20) COLLATE Latin1_General_CS_AS
To know the collation of the column for any table run following Stored Procedure.
EXEC sp_help DatabaseName
Source : SQL SERVER – Collate – Case Sensitive SQL Query Search
SELECT * FROM my_table WHERE my_column = 'my string' COLLATE Latin1_General_CS_AS
This would make a case sensitive search.
EDIT
As stated in kouton's comment here and tormuto's comment here whosoever faces problem with the below collation
should first check the default collation for their SQL server, their respective database and the column in question; and pass in the default collation with the query expression. List of collations can be found here.
SELECT * FROM Yourtable WHERE UPPER([column_NAME]) COLLATE Latin1_General_CS_AS !=[Column_NAME]
for search all rows in lowercase
SELECT * FROM Test WHERE col1 LIKE '%[abcdefghijklmnopqrstuvwxyz]%' collate Latin1_General_CS_AS
Thanks Manesh Joseph
In Posgresql you could use ~
~
For example you could search for all rows that have col_a with any letter in lowercase
col_a
select * from your_table where col_a '[a-z]';
You could modify the Regex expression according your needs.
Regards,
--For Sql
SELECT * FROM tablename WHERE tablecolumnname LIKE '%[a-z]%';
I have to add BINARY to the ColumnX, to get result as case sensitive
SELECT * FROM MyTable WHERE BINARY(ColumnX) REGEXP '^[a-z]';
This is how I did it for utf8 encoded table and utf8_unicode_ci column, which doesn't seem to have been posted exactly:
SELECT * FROM table WHERE UPPER(column) != BINARY(column)
I've done something like this to find out the lower cases.
SELECT * FROM YourTable where BINARY_CHECKSUM(lower(ColumnName)) = BINARY_CHECKSUM(ColumnName)
Logically speaking Rohit's solution should have worked, but it didn't. I think SQL Management Studio messed up when trying to optimize this.
But by modifying the string before comparing them I was able to get the right results. This worked for me:
SELECT [ExternalId] FROM [EquipmentSerialsMaster] where LOWER('0'+[ExternalId]) COLLATE Latin1_General_CS_AS != '0'+[ExternalId]
This works in Firebird SQL, it should work in any SQL queries I believe, unless the underlying connection is not case sensitive.
To find records with any lower case letters:
select * from tablename where upper(fieldname) <> fieldname
To find records with any upper case letters:
select * from tablename where lower(fieldname) <> fieldname