2009-09-23 51 views
5

Tôi có một trường có chứa các chuỗi như 'Blah-OVER', 'Blah-OveR', v.v. và muốn chọn chúng mà không có 'quá'. Điều này chỉ bắt trường hợp đầu tiên (có thể nói) chứ không phải những người khác:REPLACE phân biệt chữ hoa chữ thường() trong SQL Server 2000

SELECT field as "before", REPLACE(field, 'OVER', '') as "after" 

Làm thế nào để chỉ nhận được tất cả để nói 'Blah-' (bảo quản các trường hợp của những gì trái) mà không cần cố gắng để trang trải mọi trường hợp kết hợp với hàm REPLACE lồng nhau khác?

+0

Cảm ơn, Remus, tôi đã tìm đúng thẻ nhưng chưa thử kết hợp đó. – Kev

Trả lời

8

Sử dụng một trường hợp đối chiếu nhạy cảm:

SELECT field as "before", REPLACE(field COLLATE SQL_Latin1_General_Cp1_CI_AI 
, 'OVER', '') as "after" 

Xem COLLATE cho danh sách các tên đối chiếu, do đó bạn chọn một trong những thích hợp cho dữ liệu của bạn.

Cập nhật

Ok, vì vậy tôi đã bỏ lỡ yêu cầu thực tế của bạn (thay đổi trường hợp đầu vào, không tìm thấy case-insensitive). Giải pháp thích hợp là ... không thay đổi đầu vào nhưng sử dụng một đối chiếu đầy đủ cho dữ liệu của bạn. Nếu dữ liệu phải được hiển thị theo một định dạng cụ thể, hãy sử dụng các tùy chọn hiển thị trong máy khách, ví dụ: CSS text-transform:uppercase, không có trong máy chủ SELECT.

Không có bất kỳ hàm SQL dựng sẵn nào để thực hiện phép chuyển đổi này tại chỗ, nhưng là tầm thường để xây dựng một CLR function sử dụng RegEx. (Trên SQL 2005, không phải trên SQL 2000 ... doh, tôi cần thêm coffe).

+0

Cú pháp này mới đối với tôi! Cảm ơn! – Kev

0

Tôi không quen với SQL Server, nhưng có thể nó cho phép bạn sử dụng các biểu thức chính quy. Chúng thường cung cấp một chế độ không phân biệt dạng chữ (được đặt qua cờ i).

Nếu không, bạn có thể viết hoa trước cuộc gọi thay thế, ví dụ:

SELECT field as "before", REPLACE(UPPER(field), 'OVER', '') as "after" 
+0

Nó tạo ra 'BLAH-'. Vì vậy, nó thay đổi chuỗi đầu vào không chỉ bằng cách thay thế 'OVER'. –

+0

Một trang web tôi đã đề nghị bạn cần một số DLL tùy chỉnh được cài đặt để sử dụng regexes vào năm 2000. Ngoài ra, trả về tất cả 'blah như được viết hoa - xin lỗi, tôi nên đã chỉ định rằng trong câu hỏi, sẽ chỉnh sửa. – Kev

Các vấn đề liên quan