2015-06-11 17 views
5

Tôi có dữ liệu trong đó một số bản ghi chứa hàng trống (= không có khoảng trống, không có NULL). Ví dụ:SQL bypass REPLACE bằng câu lệnh CASE

LOCALE 
en-es 
en-uk 

uk-uk 

Khi tôi muốn chọn mà hàng trống, thật dễ dàng với:

SELECT LOCALE 
FROM ABC 
WHERE LOCALE = '' 

Nhưng khi tôi cố gắng để thay thế nó như sau, nó không hoạt động, kết quả vẫn là hàng trống :

SELECT REPLACE(LOCALE,'','WHY') AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = '' 

Nhưng nếu tôi bỏ qua điều này với CASE tuyên bố, nó hoạt động:

SELECT CASE 
     WHEN LOCALE LIKE '' THEN 'WHY' 
     ELSE LOCALE 
     END AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = '' 

Sự cố ở đây là gì? Tại sao chức năng REPLACE không hoạt động?

+1

Bạn không thể thay thế chuỗi trống. –

+0

@wewesthemenace Tôi nghĩ rằng OP đã có phần đó, câu hỏi là lý do tại sao nó không thể được thực hiện ... –

+0

thử CHỌN CHỌN CHỌN ('', '', 'TẠI SAO') AS 'LOCALE' là không gian là có sau đó bạn có thể thay thế nó. trống sting bạn không thể –

Trả lời

6

Rõ ràng là '' có nghĩa là trống (Không trống) và nó tồn tại giữa hai chữ cái liên tiếp. (Vì nó trống)

Vì vậy, Sql không thể thay thế rằng để trống giữa mỗi chữ cái với chuỗi bạn muốn. Đó là lý do tại sao bạn không thể thay thế ''

Kiểm tra truy vấn này

SELECT ISNULL(NULLIF(LOCALE, ''),'WHY') AS [LOCALE] 
FROM ABC 
WHERE LOCALE = '' 
+0

Nó không * không thể *, nó chỉ là một cái gì đó mà các nhà phát triển máy chủ sql không cho phép ... –

+0

Đồng ý .. @ZoharPeled –

+0

Tôi đã bình chọn câu trả lời của bạn vì bạn là người duy nhất hiểu câu hỏi tại thời điểm này :-) –

1

thay thế chức năng của bạn không thay thế khoảng trống. Cố gắng này

SELECT REPLACE(isnull(ITEM,''),' ','WHY') AS 'LOCALE' 
FROM Table1 
WHERE ITEM = '' 
+0

nó sẽ không hoạt động nếu ITEM rỗng –

1

chỉ là một phương pháp thay thế này thử phương pháp dưới đây

select COALESCE(NULLIF('',''), 'WHY' AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = '' 
1

Tôi đề nghị để bạn có thể sử dụng NULLIF để chuyển đổi chuỗi rỗng để NULL, sau đó sử dụng COALESCE (ANSI tiêu chuẩn) để thay thế NULL thành bất kỳ giá trị nào bạn muốn, như sau:

SELECT COALESCE(NULLIF(LOCALE, ''),'WHY') AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = '' 
Các vấn đề liên quan