[英]SQL query to search for lowercase strings
我想要一個 SQL 查詢,它可以搜索某個單詞,但只能是小寫字母。
我在嘗試
select * from employees where name like LOWER('%smith%')
但是,這不會帶來任何結果。
但是,當我select * from employees where name like '%smith%'
時,它會返回名稱為 SMITH 和 smith 的員工......
提前致謝!
您的默認排序規則可能設置為不區分大小寫的選項。 簡而言之,這將導致所有字符比較都被執行,就好像比較的邊是相同情況一樣,無論這是否成立。
您可以在WHERE
子句中的列名稱后面使用COLLATE
語句:
select * from employees where name COLLATE Latin1_General_CS_AS like '%smith%'
但是,如果您非常需要區分大小寫的比較,您可能希望更改數據庫的默認排序規則,因為如您所見,顯式標記排序規則非常冗長。
通常,為了以區分大小寫的方式查詢表,應使用區分大小寫的排序規則指定列(或整個數據庫)。
出於性能原因,如果您將定期對此列執行區分大小寫的查詢,則這將是首選方法。
但是,在緊要關頭,您可以即時指定查詢排序規則。 這是以更昂貴的查詢計划為代價的,因此將其作為最后的選擇。
例如:
SELECT * FROM Employees
WHERE EmployeeName COLLATE SQL_Latin1_General_CP1_CS_AS
LIKE '%smith%'
區分大小寫的排序規則多種多樣,因此您通常希望選擇最接近所使用的標准區分大小寫排序規則的排序規則。
您可以通過運行以下語句來檢查已配置的排序規則:
--Server level
SELECT SERVERPROPERTY('COLLATION')
--Database level
SELECT DATABASEPROPERTYEX('DatabaseName', 'Collation')
--Column level
USE DatabaseName
GO
SELECT name, collation_name
FROM sys.columns
WHERE OBJECT_ID IN (SELECT OBJECT_ID
FROM sys.objects
WHERE type = 'U'
AND name = 'TableName')
AND name = 'ColumnName'
這些很有可能全部返回相同的值。 例如,SQL_Latin1_General_CP1_CI_AS,在這種情況下,用於區分大小寫的查詢的排序規則將是SQL_Latin1_General_CP1_CS_AS。
根據獲得的結果,您將要從此列表中選擇相關的區分大小寫的排序規則。
使用排序 COLLATE Latin1_General_CP1_CS_AS
來區分大小寫,安裝SQL Server時默認排序SQL_Latin1_General_CP1_CI_AS
為SQL_Latin1_General_CP1_CI_AS
select * from employees where name COLLATE Latin1_General_CS_AS like '%smith%'
哪里
CS :區分大小寫
AS :口音敏感
您也可以使用 Binary_checksum(lower()) function,如下所示。
select * 來自員工 where BINARY_CHECKSUM(EmployeeName) = BINARY_CHECKSUM(Lower(EmployeeName))
請注意...如果“Employeename”列具有 null 值,它也會在結果中列出空值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.