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

trích xuất các số từ một ô * varchar * và làm toán với chúng trong mysql thuần túy

Chắc chắn có thể thực hiện được, nhưng SQL được thiết kế dựa trên tiên đề về giá trị nguyên tử (tức là dạng chuẩn đầu tiên ). Việc tách một trường hầu như không bao giờ cần thiết. Khoảng thời gian duy nhất bạn cần để sử dụng nó trong cơ sở dữ liệu được thiết kế tốt là với các ngày mà bạn có thể muốn làm việc chỉ với tháng hoặc năm của trường ngày. Mặc dù bạn chắc chắn sẽ tìm thấy cơ sở dữ liệu mà một tên ngốc nào đó thiết kế mà bạn buộc phải làm việc vi phạm khái niệm cốt lõi này, nhưng bắt đầu bằng cách cố gắng tìm ra cách làm việc với những thiết kế này là một ý tưởng tồi.

Ngoài ra, bước cuối cùng của bạn "lưu trữ trong ô 239 đó" khiến tôi nghĩ rằng bạn vẫn đang xem cơ sở dữ liệu giống như chúng là bảng tính. Không phải vậy. Một thành phần cốt lõi khác của cơ sở dữ liệu là thứ tự của các hàng không quan trọng. Mặt khác, các trường luôn liên quan đến các trường khác trong cùng một hàng. Bạn có thể đặt giá trị của một trong các trường là một thứ mà trường ID của bản ghi đó là 239, nhưng nói chung bạn sẽ không bao giờ quan tâm đến thực tế rằng bản ghi là thứ 239.

Điều đó nói rằng, đây là một truy vấn sẽ làm những gì bạn muốn:

Giả định:định dạng của trường là "11a22 b". Đó là, một số có hai chữ số, theo sau là một chữ cái, tiếp theo là một số hai chữ số khác, có thể theo sau là dấu cách và chữ 'b'.

SELECT CAST(SUBSTRING(Value,1,2) AS INT) 
    * CAST(SUBSTRING(Value,3,2) AS INT) 
    + CASE RIGHT(Value,1) WHEN 'b' THEN -1 ELSE 0 END
FROM MyTable


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để phát hiện các hàng thừa trong bảng?

  2. Cách lưu trữ dữ liệu vào cơ sở dữ liệu trong LARAVEL 5.2

  3. Không thể chuyển đổi giá trị '2012-04-05 10:20:00' từ cột XX thành TIMESTAMP

  4. chọn tổng cho đến số tiền nhất định và sau đó cập nhật các trường nhất định dựa trên điều kiện

  5. Hibernate 5:- org.hibernate.MappingException:Thực thể không xác định