Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Coalesce tương đương cho giá trị thứ n không null - MySQL

Tôi không chắc liệu tôi có khuyên bạn nên sử dụng giải pháp này hay không ... chuẩn hóa dữ liệu của bạn luôn là lựa chọn tốt hơn, nhưng tôi muốn trả lời bằng cách sử dụng SQL thuần túy với một số hàm chuỗi. Truy vấn này sẽ trả về những gì bạn đang tìm kiếm:

SELECT
  Name,
  Changes,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 1)), ',', 1)) as Change1,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 2)), ',', 1)) as Change2,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 3)), ',', 1)) as Change3,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 4)), ',', 1)) as Change4,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 5)), ',', 1)) as Change5,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 6)), ',', 1)) as Change6
FROM (
  SELECT
    Name,
    CONCAT_WS(',', CURRENT, OCT12, SEPT12, AUG12, JUL12, JUN12, MAY12, APR12, ',') as Changes
  FROM
    TableA
) s

Tôi đang nối tất cả các giá trị trong một chuỗi được phân tách bằng dấu phẩy, với hai dấu phẩy ở cuối chuỗi (dù sao thì một dấu phẩy là đủ, nhưng sẽ dễ dàng hơn nếu đặt hai và chỉ bỏ qua dấu cuối cùng ...), và vì tôi ' m sử dụng CONCAT_WS nó sẽ tự động bỏ qua các giá trị null và chuỗi kết quả sẽ giống như Aug-12,Jun-12,Apr-12,, .

Sau đó, trong truy vấn bên ngoài, tôi đang trích xuất phần tử thứ n của chuỗi, bằng cách sử dụng SUBSTRIG_INDEX. Tôi khuyên bạn nên bình thường hóa cơ sở dữ liệu của mình, nhưng nếu bạn cần sửa nhanh, giải pháp này có thể là một điểm khởi đầu tốt.

Xem nó hoạt động tại đây .

Xin lưu ý rằng tôi không trả về giá trị NULL mà không có thay đổi nào, nhưng thay vào đó tôi trả về các chuỗi trống. Điều này có thể được thay đổi nếu bạn cần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các thông điệp Websphere MQ được lưu trữ như thế nào để cho phép duy trì?

  2. Chèn vào một bảng có dấu gạch ngang trong tên

  3. Theo dõi tiến độ truy vấn dài MySQL

  4. Mysql Chỉ mục không gian không được sử dụng

  5. Làm cách nào để cập nhật một bit duy nhất của số nhị phân dưới dạng chuyển đổi?