SQL- Bỏ qua trường hợp trong khi tìm kiếm một chuỗi


130


Tôi có các dữ liệu sau đây trong Bảng
PriceOrderShipped
PriceOrderShippedInbound
PriceOrderShippedOutbound

Trong SQL Tôi cần viết một truy vấn tìm kiếm một chuỗi trong bảng. Trong khi tìm kiếm một chuỗi nó nên bỏ qua trường hợp. Đối với truy vấn SQL được đề cập dưới đây

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%' 

cung cấp tất cả các dữ liệu trên, trong khi

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%Priceorder%' 

không cho.

Ví dụ. khi tôi tìm kiếm 'PriceOrder' hoặc 'priceOrder' thì nó hoạt động nhưng 'priceorder' hoặc 'Priceorder' không hoạt động. Tôi đã thử với truy vấn bên dưới bằng cách sử dụng COLLATE, nhưng nó không hoạt động. Hãy cho tôi biết tôi đang đi sai ở đâu.

SELECT DISTINCT COL_NAME FROM myTable WHERE 
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'

Trường hợp có thể trùng lặp của máy chủ SQL bỏ qua trường hợp trong một biểu thức
Liam

Câu trả lời:


232

Sử dụng một cái gì đó như thế này -

SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')

hoặc là

SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')

14
Tôi nghĩ bạn nên luôn luôn so sánh các chuỗi viết hoa (UPPER) là cách thực hành tốt nhất. Google "
thổ nhĩ kỳ

2
Muốn biết câu trả lời của bạn có bất kỳ vấn đề về hiệu suất nào không bằng cách chuyển đổi giá trị cột sang UPPERhoặc LOWERtrường hợp sau đó sử dụng LIKEđể tìm kiếm?
shaijut

Trên thực tế, bạn sẽ phải so sánh cả hai biến thể UPPER và LOWER vì một số ký tự có các cách biểu diễn khác nhau trong chữ hoa nhưng cùng một cách trình bày trong chữ thường. Đối với các nhân vật khác, điều ngược lại có thể đúng. Java đề cập đến bảng chữ cái tiếng Gruzia cụ thể là lý do để thực hiện một toLowerCase () bổ sung trong so sánh không phân biệt chữ hoa chữ thường.
Crusha K. Rool

1
Thật không may, cách tiếp cận này gây ra quét toàn bộ bảng như được mô tả trong bài viết này: alvinalexander.com/sql/ . Không thể áp dụng tìm kiếm chỉ mục, vì cột được lọc được sửa đổi bởi hàm UPPER / LOWER.
Jeff S.

Đặt đối chiếu (trước khi tạo chỉ mục) dường như là cách tiếp cận tốt hơn nếu hiệu suất truy vấn với mức trên / dưới là không đủ.
Jeff S.

10

Xem câu hỏi và câu trả lời tương tự này để tìm kiếm với trường hợp không nhạy cảm - Máy chủ SQL bỏ qua trường hợp trong biểu thức where

Hãy thử sử dụng một cái gì đó như:

SELECT DISTINCT COL_NAME 
FROM myTable 
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'

nó không hoạt động Tôi nhận được truy vấn SQL chưa kết thúc đúng cách trước Collate
shockwave

@ Miguel-F .. nó hoạt động tốt nhưng nó khác với CHỌN DISTINCT COL_NAME TỪ myTable WHERE COL_NAME THÍCH '% priceorder%' vì điều này cũng hoạt động tốt với tôi ..
Jishant

Tôi sẽ tư vấn sử dụng 'SQL_Latin1_General_Cp1_CI_AS_KI_WI' thay thế. Nó không phải là trường hợp nhạy cảm cho một seach.
dùng8155123

8

Như thế này.

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME iLIKE '%Priceorder%'

Trong postgresql.


4
Câu hỏi này được gắn thẻ máy chủ sql để câu trả lời của postgres không liên quan.
Liam

4

Bạn có thể nên sử dụng SQL_Latin1_General_Cp1_CI_AS_KI_WInhư đối chiếu của bạn. Một trong những bạn xác định trong câu hỏi của bạn là trường hợp nhạy cảm rõ ràng.

Bạn có thể xem danh sách các bộ sưu tập ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.