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

PATINDEX () thay thế trong MYSQL

Mặc dù không có PATINDEX() chính thức trong MySQL đạt được cả tra cứu mẫu regex với chỉ mục ký tự trả về hoặc kết hợp LOCATE()REGEXP() , hãy xem xét một hàm do người dùng xác định lặp qua từng ký tự trong độ dài của một chuỗi và kiểm tra một REGEXP hoa văn trên nhân vật. Sau khi được tạo, hãy sử dụng một hàm như vậy trong dòng truy vấn.

DROP FUNCTION IF EXISTS PatIndex;

DELIMITER $$

CREATE FUNCTION PatIndex(pattern VARCHAR(255), tblString VARCHAR(255)) RETURNS INTEGER
    DETERMINISTIC
BEGIN

    DECLARE i INTEGER;
    SET i = 1;

    myloop: WHILE (i <= LENGTH(tblString)) DO

        IF SUBSTRING(tblString, i, 1) REGEXP pattern THEN
            RETURN(i);
            LEAVE myloop;        
        END IF;    

        SET i = i + 1;

    END WHILE; 

    RETURN(0);

END

Truy vấn (tìm kiếm chữ số đầu tiên trong chuỗi)

SELECT mystring, PatIndex('[0-9]', mystring) As FirstNumberCharacter
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 thế nào để ngăn chặn việc tạo các bản ghi trong đó giá trị của hai trường giống nhau?

  2. mysql trong danh sách chỉ xác nhận id đầu tiên trong danh sách. có thể là một vấn đề đốm màu

  3. Kéo các bản ghi từ bảng đơn đặt hàng cho tuần hiện tại

  4. Cách xoay một lược đồ thực thể-thuộc tính-giá trị MySQL

  5. Cách chèn / truy xuất tệp được lưu trữ dưới dạng BLOB trong db MySQL bằng python