Giải pháp thẳng và battleted cho các ký tự Latin và Cyrillic:
DELIMITER //
CREATE FUNCTION `remove_non_numeric_and_letters`[input TEXT]
RETURNS TEXT
BEGIN
DECLARE output TEXT DEFAULT '';
DECLARE iterator INT DEFAULT 1;
WHILE iterator < [LENGTH[input] + 1] DO
IF SUBSTRING[input, iterator, 1] IN
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']
THEN
SET output = CONCAT[output, SUBSTRING[input, iterator, 1]];
END IF;
SET iterator = iterator + 1;
END WHILE;
RETURN output;
END //
DELIMITER ;
Usage:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
Các ký tự không phải là người trong số như sau-
@,!,#,&,[],?, /
Không có chức năng sẵn có để loại bỏ các ký tự không phải là một chuỗi trong chuỗi trong MySQL. Do đó, chúng tôi tạo ra một chức năng loại bỏ tất cả các ký tự không phải là ký sinh viên. Tuyên bố và định nghĩa chức năng như sau.
mysql> delimiter // mysql> CREATE FUNCTION RemoveNonAlphaNumeric[ s CHAR[255] ] RETURNS CHAR[255] DETERMINISTIC -> BEGIN -> DECLARE var1, length SMALLINT DEFAULT 1; -> DECLARE result CHAR[255] DEFAULT ''; -> DECLARE ch CHAR[1]; -> SET length = CHAR_LENGTH[ s ]; -> REPEAT -> BEGIN -> SET ch = MID[ s, var1, 1 ]; -> IF ch REGEXP '[[:alnum:]]' THEN -> SET result =CONCAT[result ,ch]; -> END IF; -> SET var1 = var1 + 1; -> END; -> UNTIL var1 >length END REPEAT; -> RETURN result ; -> END // Query OK, 0 rows affected [0.10 sec]
Hàm có tên ‘RemoveNonalPhanumeric, loại bỏ tất cả các ký tự không phải là ký tự vô sinh khỏi một chuỗi. Để kiểm tra, bây giờ chúng tôi sẽ gọi chức năng do người dùng xác định.
mysql>delimiter ; mysql> select 'My Email id is test@123!',RemoveNonAlphaNumeric['My Email id is test@123!'];
Sau đây là đầu ra hiển thị việc loại bỏ thành công các ký tự chữ và số bằng cách sử dụng chức năng của RemoveNononalphanumeric.
+--------------------------+---------------------------------------------------+ | My Email id is test@123! | removeNonAlphaNumeric['My Email id is test@123!'] | +--------------------------+---------------------------------------------------+ | My Email id is test@123! | MyEmailidistest123 | +--------------------------+---------------------------------------------------+ 1 row in set [0.15 sec]
Trong chuỗi này [myemailidistest123], không có @ và! Biểu tượng bây giờ, có nghĩa là chức năng đang hoạt động chính xác.
Cập nhật vào ngày 30 tháng 3 năm 2019 22:30:23
- Câu hỏi và câu trả lời liên quan
- Chương trình PHP để loại bỏ các ký tự không phải là vô hiệu khỏi chuỗi
- Làm thế nào để loại bỏ các ký tự không phải là đa số trong PHP Stirng?
- JavaScript xóa các ký tự không trùng lặp khỏi chuỗi
- Xóa tất cả các ký tự phi alphabetical của một chuỗi trong Java?
- Loại bỏ tất cả các ký tự không alphabetic khỏi một chuỗi trong JavaScript
- Cách xóa các ký tự không phải ASCII khỏi chuỗi
- Làm thế nào để xóa các ký tự khỏi một chuỗi trong Arduino?
- Xóa tất cả các ký tự của chuỗi thứ nhất khỏi JavaScript thứ hai
- Làm thế nào để loại bỏ tất cả các ký tự đặc biệt, dấu câu và không gian từ một chuỗi trong Python?
- Truy vấn MySQL để xóa tất cả các ký tự sau dấu phẩy cuối cùng trong chuỗi?
- Làm thế nào để loại bỏ các ký tự cụ thể khỏi một chuỗi trong Python?
- Làm thế nào để xóa một số ký tự nhất định khỏi chuỗi trong C ++?
- Viết một biểu thức thông thường để xóa tất cả các ký tự đặc biệt khỏi chuỗi JavaScript?
- Làm thế nào để xóa các ký tự không từ trong JavaScript?
- Làm thế nào để cắt giảm các ký tự không thể in từ một chuỗi trong Python?
Dưới đây là hai tùy chọn để tìm các hàng chỉ chứa các ký tự không phải là số đồng âm trong MySQL.
Các ký tự không phải là đồng số bao gồm các ký tự dấu câu như
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
8 và các ký hiệu như -- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
9, cũng như các ký tự khoảng trắng như các ký tự không gian hoặc tab.Dữ liệu mẫu
Chúng tôi sẽ sử dụng các dữ liệu sau đây cho các ví dụ của chúng tôi:
CREATE TABLE t1 [
c1 varchar[255] NULL
];
INSERT INTO t1 VALUES
['Music'],
['Live Music'],
['Café'],
['Café Del Mar'],
['100 Cafés'],
['[email protected]'],
['1 + 1'],
['[]'],
['[email protected]#&[]–[{}]:;'',?/*'],
['`~$^+=“'],
['$1.50'],
['Player 456'],
['007'],
[null],
[''],
['é'],
['É'],
['é 123'],
['ø'],
['ø 123'];
SELECT c1 FROM t1;
Result:
+----------------------+ | c1 | +----------------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | [] | | [email protected]#&[]–[{}]:;',?/* | | `~$^+=“ | | $1.50 | | Player 456 | | 007 | | NULL | | | | é | | É | | é 123 | | ø | | ø 123 | +----------------------+
Tùy chọn 1: So sánh với @,!,#,&,[],?, /
0
Chúng tôi có thể sử dụng toán tử MySQL từ
@,!,#,&,[],?, /1 để so sánh cột của chúng tôi với một biểu thức thông thường.
Khả năng biểu thức chính quy của MySQL, bao gồm hỗ trợ cho các lớp ký tự POSIX. Do đó, chúng ta có thể sử dụng lớp ký tự
@,!,#,&,[],?, /0 POSIX trong các biểu thức thông thường của chúng ta để tìm các hàng chỉ chứa ký tự chữ và số, sau đó phủ nhận điều đó với toán tử
@,!,#,&,[],?, /3.
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[[:alnum:]]';
Result:
+----------------------+ | c1 | +----------------------+ | [] | | [email protected]#&[]–[{}]:;',?/* | | `~$^+=“ | | | +----------------------+
Nếu bạn cần loại trừ một ký tự cụ thể, bạn luôn có thể sử dụng hàm
@,!,#,&,[],?, /4.
Ví dụ: hãy để loại trừ chuỗi trống khỏi hàng cuối cùng:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
0Kết quả:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
1Tùy chọn 2: Chỉ định một loạt các ký tự
Một cách khác để làm điều đó là chỉ định một loạt các ký tự trong biểu thức thông thường của bạn.
Example:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
2Result:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
3Và để xóa chuỗi trống:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
4Result:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
5Trong trường hợp này, phạm vi loại trừ của tôi đã không bao gồm các ký tự chữ và số như
@,!,#,&,[],?, /5,
@,!,#,&,[],?, /6 và
@,!,#,&,[],?, /7, và do đó, đầu ra không phải là một đại diện thực sự của các ký tự không phải là tổng số. Điều đó nói rằng, ít nhất phương pháp này cung cấp cho bạn tùy chọn để chỉ định các ký tự chính xác mà bạn muốn bao gồm hoặc loại trừ khỏi kết quả.
Giải pháp thay thế cho @,!,#,&,[],?, /
1
Trong MySQL, các toán tử
@,!,#,&,[],?, /9 và
mysql> delimiter // mysql> CREATE FUNCTION RemoveNonAlphaNumeric[ s CHAR[255] ] RETURNS CHAR[255] DETERMINISTIC -> BEGIN -> DECLARE var1, length SMALLINT DEFAULT 1; -> DECLARE result CHAR[255] DEFAULT ''; -> DECLARE ch CHAR[1]; -> SET length = CHAR_LENGTH[ s ]; -> REPEAT -> BEGIN -> SET ch = MID[ s, var1, 1 ]; -> IF ch REGEXP '[[:alnum:]]' THEN -> SET result =CONCAT[result ,ch]; -> END IF; -> SET var1 = var1 + 1; -> END; -> UNTIL var1 >length END REPEAT; -> RETURN result ; -> END // Query OK, 0 rows affected [0.10 sec]0 là từ đồng nghĩa với
mysql> delimiter // mysql> CREATE FUNCTION RemoveNonAlphaNumeric[ s CHAR[255] ] RETURNS CHAR[255] DETERMINISTIC -> BEGIN -> DECLARE var1, length SMALLINT DEFAULT 1; -> DECLARE result CHAR[255] DEFAULT ''; -> DECLARE ch CHAR[1]; -> SET length = CHAR_LENGTH[ s ]; -> REPEAT -> BEGIN -> SET ch = MID[ s, var1, 1 ]; -> IF ch REGEXP '[[:alnum:]]' THEN -> SET result =CONCAT[result ,ch]; -> END IF; -> SET var1 = var1 + 1; -> END; -> UNTIL var1 >length END REPEAT; -> RETURN result ; -> END // Query OK, 0 rows affected [0.10 sec]1.Do đó, chúng tôi có thể thay thế bất kỳ ví dụ nào trước đây bằng
mysql> delimiter // mysql> CREATE FUNCTION RemoveNonAlphaNumeric[ s CHAR[255] ] RETURNS CHAR[255] DETERMINISTIC -> BEGIN -> DECLARE var1, length SMALLINT DEFAULT 1; -> DECLARE result CHAR[255] DEFAULT ''; -> DECLARE ch CHAR[1]; -> SET length = CHAR_LENGTH[ s ]; -> REPEAT -> BEGIN -> SET ch = MID[ s, var1, 1 ]; -> IF ch REGEXP '[[:alnum:]]' THEN -> SET result =CONCAT[result ,ch]; -> END IF; -> SET var1 = var1 + 1; -> END; -> UNTIL var1 >length END REPEAT; -> RETURN result ; -> END // Query OK, 0 rows affected [0.10 sec]2 hoặc
mysql> delimiter // mysql> CREATE FUNCTION RemoveNonAlphaNumeric[ s CHAR[255] ] RETURNS CHAR[255] DETERMINISTIC -> BEGIN -> DECLARE var1, length SMALLINT DEFAULT 1; -> DECLARE result CHAR[255] DEFAULT ''; -> DECLARE ch CHAR[1]; -> SET length = CHAR_LENGTH[ s ]; -> REPEAT -> BEGIN -> SET ch = MID[ s, var1, 1 ]; -> IF ch REGEXP '[[:alnum:]]' THEN -> SET result =CONCAT[result ,ch]; -> END IF; -> SET var1 = var1 + 1; -> END; -> UNTIL var1 >length END REPEAT; -> RETURN result ; -> END // Query OK, 0 rows affected [0.10 sec]3.
Ví dụ về
@,!,#,&,[],?, /9:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
6Ví dụ về
mysql> delimiter // mysql> CREATE FUNCTION RemoveNonAlphaNumeric[ s CHAR[255] ] RETURNS CHAR[255] DETERMINISTIC -> BEGIN -> DECLARE var1, length SMALLINT DEFAULT 1; -> DECLARE result CHAR[255] DEFAULT ''; -> DECLARE ch CHAR[1]; -> SET length = CHAR_LENGTH[ s ]; -> REPEAT -> BEGIN -> SET ch = MID[ s, var1, 1 ]; -> IF ch REGEXP '[[:alnum:]]' THEN -> SET result =CONCAT[result ,ch]; -> END IF; -> SET var1 = var1 + 1; -> END; -> UNTIL var1 >length END REPEAT; -> RETURN result ; -> END // Query OK, 0 rows affected [0.10 sec]1:
-- outputs "hello12356"
SELECT remove_non_numeric_and_letters['hello - 12356-привет ""]']
7