Nhiều thay thế trong MySQL

Tôi có một bảng có các giá trị Boolean (chỉ 0 và 1) cần được chỉnh sửa CSV cho khách hàng. Tôi biết tôi có thể làm 1 thay thế như thế này

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes') 
FROM myTable 
WHERE id > 1000;

Thao tác này sẽ chuyển đổi tất cả các giá trị của 1 thành 'Có', nhưng làm cách nào để thực hiện việc này trong một truy vấn duy nhất cho cả 1 => Có và 0 => Không để kết quả Boolean được lưu trữ trong một cột?

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;

Nhưng truy vấn này đã tạo một cột bổ sung để thay thế chuỗi 'Không' (vì vậy kết quả cuối cùng có 4 cột, email, tên, icon_clicked->yes, icon_clicked->no)

Giải pháp tốt nhất

Một cách là làm tổ REPLACE

SELECT REPLACE(REPLACE(icon_clicked, 0, 'No'), 1, 'Yes')), ...
FROM myTable
...

hoặc sử dụng CASE WHEN (điều này sẽ hoạt động với hầu hết các RDBMS so với hàm

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
0 có liên quan đến MySQL)

SELECT CASE WHEN icon_clicked THEN 'Yes' ELSE 'No' END, ...
FROM myTable
...

BIÊN TẬP

Ngoài ra còn có một cách tốt đẹp sử dụng

SELECT icon_clicked,
       ELT(FIELD(icon_clicked,0,1),'No','Yes'),
       ELT(icon_clicked + 1, 'No', 'Yes')
FROM mytable

Giải pháp liên quan

Sql – Chèn vào… giá trị ( CHỌN … TỪ … )

Thử

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2  

Đây là ANSI SQL tiêu chuẩn và sẽ hoạt động trên mọi DBMS

Nó chắc chắn hoạt động cho

  • tiên tri
  • Máy chủ MS SQL
  • mysql
  • postgres
  • SQLite v3
  • siêu dữ liệu
  • DB2
  • Sybase
  • Vertica
  • HSQLDB
  • H2
  • AWS RedShift
  • SAP HANA
  • Google Spanner

Cách thay thế một ký tự bằng một dòng mới trong Vim

Sử dụng SELECT REPLACE(email, '%40', '@'), REPLACE(name,'%20', ' '), REPLACE(icon_clicked, 1, 'Yes'), REPLACE(icon_clicked, 0, 'No') FROM myTable WHERE id > 1000; 4 thay vì SELECT REPLACE(email, '%40', '@'), REPLACE(name,'%20', ' '), REPLACE(icon_clicked, 1, 'Yes'), REPLACE(icon_clicked, 0, 'No') FROM myTable WHERE id > 1000; 5

Thay thế bằng

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
5 sẽ chèn một ký tự null vào văn bản. Để có một dòng mới, hãy sử dụng
SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
4. Tuy nhiên, khi tìm kiếm một dòng mới, bạn vẫn sử dụng
SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
5. Sự bất đối xứng này là do
SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
5 và
SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
4 làm những việc hơi khác nhau

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
5 khớp với cuối dòng (dòng mới), trong khi
SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
4 khớp với dấu xuống dòng. Mặt khác, trong trường hợp thay thế
SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
5 chèn một ký tự null trong khi
SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
4 chèn một dòng mới (chính xác hơn, nó được coi là CR đầu vào). Đây là một ví dụ nhỏ, không tương tác để minh họa điều này, sử dụng tính năng dòng lệnh Vim (nói cách khác, bạn có thể sao chép và dán đoạn mã sau vào thiết bị đầu cuối để chạy nó).
SELECT REPLACE(REPLACE(icon_clicked, 0, 'No'), 1, 'Yes')), ...
FROM myTable
...
5 hiển thị kết xuất lục phân của tệp kết quả

echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a                                bar.
After:
0000000: 000a 720a                                ..r.

Nói cách khác,

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
5 đã chèn byte 0x00 vào văn bản;

Làm cách nào để thay thế tất cả các lần xuất hiện của một chuỗi trong MySQL?

Hàm REPLACE() thay thế tất cả các lần xuất hiện của một chuỗi con trong một chuỗi bằng một chuỗi con mới. Ghi chú. Hàm này thực hiện thay thế phân biệt chữ hoa chữ thường.

Làm cách nào để thay thế tất cả các giá trị cột trong MySQL?

Để thay thế, hãy sử dụng hàm REPLACE() của MySQL . Vì bạn cần cập nhật bảng cho việc này, hãy sử dụng hàm UPDATE() với mệnh đề SET.

Làm cách nào để tìm và thay thế trong cơ sở dữ liệu MySQL?

Cú pháp hàm REPLACE như sau. .
REPLACE(str,old_string,new_string);
CẬP NHẬT tbl_name SET field_name = REPLACE(field_name, string_to_find, string_to_replace) điều kiện WHERE;
CẬP NHẬT sản phẩm SET productDescription = REPLACE(productDescription, 'abuot', 'about');

Làm cách nào để thay thế không gian trong MySQL?

Sử dụng hàm REPLACE nếu bạn muốn thay thế tất cả các lần xuất hiện của một chuỗi con trong một chuỗi đã cho . Trong ví dụ của chúng tôi, chúng tôi thay thế các khoảng trống không cần thiết bằng các giá trị trống.