2014-05-07 16 views
9

Tôi khá mới đối với SQL và hy vọng ai đó ở đây có thể giúp tôi với điều này.Máy chủ SQL: sử dụng CASE với LIKE

Tôi có quy trình được lưu trữ nơi tôi muốn chuyển một giá trị khác tùy thuộc vào việc cột có chứa một quốc gia nhất định hay không.

Cho đến nay tôi chỉ sử dụng CASE khi kiểm tra kết quả phù hợp với một số hoặc giá trị cụ thể để tôi không chắc chắn về điều này. Ai đó có thể cho tôi biết nếu những điều sau đây là hợp lệ và chính xác hoặc cho tôi biết cách viết đúng cách này (chỉ liên quan đến phần trong ngoặc đơn)?

(CASE countries 
    WHEN LIKE '%'[email protected]+'%' THEN 'national' 
    ELSE 'regional') AS validity 

Ghi chú: @selCountry là tên biến của một quốc gia, các nước có thể là trống rỗng, một quốc gia hay một số quốc gia tách ra với dấu phẩy và không gian. Về cơ bản tôi chỉ muốn kiểm tra xem các quốc gia có chứa @selCountry và nếu có, hãy đặt giá trị thành 'quốc gia'.

Trả lời

14

Đây là cú pháp bạn cần:

CASE WHEN countries LIKE '%'[email protected]+'%' THEN 'national' ELSE 'regional' END 

Mặc dù, theo vấn đề ban đầu của bạn, tôi muốn giải quyết nó một cách khác, tách nội dung của @selcountry int một hình thức bảng và tham gia vào nó.

+0

Cảm ơn rất nhiều công việc! – Mike

+0

có ... vâng ... có .. – Cloud

1

Thêm số END cuối cùng trước tên bí danh.

CASE WHEN countries LIKE '%'[email protected]+'%' 
    THEN 'national' ELSE 'regional' 
END AS validity 

Ví dụ:

SELECT CASE WHEN countries LIKE '%'[email protected]+'%' 
     THEN 'national' ELSE 'regional' 
     END AS validity 
FROM TableName 
+0

Cảm ơn điều này là tốt. – Mike

-4

Một trong những điều đầu tiên bạn cần phải tìm hiểu về SQL (và cơ sở dữ liệu quan hệ) là bạn không nên lưu trữ nhiều giá trị trong một lĩnh vực duy nhất.

Bạn nên tạo một bảng khác và lưu một giá trị cho mỗi hàng.

Điều này sẽ làm cho truy vấn của bạn dễ dàng hơn và cấu trúc cơ sở dữ liệu của bạn tốt hơn.

select 
    case when exists (select countryname from itemcountries where yourtable.id=itemcountries.id and countryname = @country) then 'national' else 'regional' end 
from yourtable 
+1

"Bạn đang làm sai" không phải là câu trả lời hữu ích. Một bình luận hữu ích, có lẽ. – miken32

+0

@ miken32 Khi ai đó, giống như OP, là "khá mới đối với SQL", tôi cho rằng "bạn đang làm sai" là _the_ câu trả lời hữu ích nhất. – podiluska

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