Mysql menghapus karakter non numerik

Saya sedang mengerjakan rutinitas yang membandingkan string, tetapi untuk efisiensi yang lebih baik saya perlu menghapus semua karakter yang bukan huruf atau angka

Saya menggunakan beberapa fungsi

DROP FUNCTION IF EXISTS alphanum; 
DELIMITER | 
CREATE FUNCTION alphanum( str CHAR(255) ) RETURNS CHAR(255) DETERMINISTIC
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret CHAR(255) DEFAULT ''; 
  DECLARE c CHAR(1);
  IF str IS NOT NULL THEN 
    SET len = CHAR_LENGTH( str ); 
    REPEAT 
      BEGIN 
        SET c = MID( str, i, 1 ); 
        IF c REGEXP '[[:alnum:]]' THEN 
          SET ret=CONCAT(ret,c); 
        END IF; 
        SET i = i + 1; 
      END; 
    UNTIL i > len END REPEAT; 
  ELSE
    SET ret='';
  END IF;
  RETURN ret; 
END | 
DELIMITER ; 
0 sekarang, tapi mungkin ada solusi yang lebih cepat dan lebih baik?

Solusi terbaik

Menggunakan MySQL8. 0 atau lebih tinggi

Atas kebaikan michal. jawaban jakubeczy di bawah, diganti dengan Regex sekarang didukung oleh MySQL

UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zA-Z ]', '')
_

Menggunakan MySQL5. 7 atau lebih rendah

Regex tidak didukung di sini. Saya harus membuat fungsi saya sendiri yang disebut alphanum yang menghilangkan karakter untuk saya

DROP FUNCTION IF EXISTS alphanum; 
DELIMITER | 
CREATE FUNCTION alphanum( str CHAR(255) ) RETURNS CHAR(255) DETERMINISTIC
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret CHAR(255) DEFAULT ''; 
  DECLARE c CHAR(1);
  IF str IS NOT NULL THEN 
    SET len = CHAR_LENGTH( str ); 
    REPEAT 
      BEGIN 
        SET c = MID( str, i, 1 ); 
        IF c REGEXP '[[:alnum:]]' THEN 
          SET ret=CONCAT(ret,c); 
        END IF; 
        SET i = i + 1; 
      END; 
    UNTIL i > len END REPEAT; 
  ELSE
    SET ret='';
  END IF;
  RETURN ret; 
END | 
DELIMITER ; 

Sekarang saya bisa melakukannya

select 'This works finally!', alphanum('This works finally!');

dan saya mengerti

+---------------------+---------------------------------+
| This works finally! | alphanum('This works finally!') |
+---------------------+---------------------------------+
| This works finally! | Thisworksfinally                |
+---------------------+---------------------------------+
1 row in set (0.00 sec)
_

Hore

Solusi Terkait

Java – Cara menghasilkan string alfanumerik acak

Algoritma

Untuk menghasilkan string acak, gabungkan karakter yang diambil secara acak dari kumpulan simbol yang dapat diterima hingga string mencapai panjang yang diinginkan

Penerapan

Berikut adalah beberapa kode yang cukup sederhana dan sangat fleksibel untuk menghasilkan pengidentifikasi acak. Baca informasi berikut untuk catatan aplikasi penting

public class RandomString {

    /**
     * Generate a random string.
     */
    public String nextString() {
        for (int idx = 0; idx < buf.length; ++idx)
            buf[idx] = symbols[random.nextInt(symbols.length)];
        return new String(buf);
    }

    public static final String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    public static final String lower = upper.toLowerCase(Locale.ROOT);

    public static final String digits = "0123456789";

    public static final String alphanum = upper + lower + digits;

    private final Random random;

    private final char[] symbols;

    private final char[] buf;

    public RandomString(int length, Random random, String symbols) {
        if (length < 1) throw new IllegalArgumentException();
        if (symbols.length() < 2) throw new IllegalArgumentException();
        this.random = Objects.requireNonNull(random);
        this.symbols = symbols.toCharArray();
        this.buf = new char[length];
    }

    /**
     * Create an alphanumeric string generator.
     */
    public RandomString(int length, Random random) {
        this(length, random, alphanum);
    }

    /**
     * Create an alphanumeric strings from a secure generator.
     */
    public RandomString(int length) {
        this(length, new SecureRandom());
    }

    /**
     * Create session identifiers.
     */
    public RandomString() {
        this(21);
    }

}

Contoh penggunaan

Buat generator tidak aman untuk pengidentifikasi 8 karakter

RandomString gen = new RandomString(8, ThreadLocalRandom.current());
_

Buat generator yang aman untuk pengidentifikasi sesi

RandomString session = new RandomString();

Buat generator dengan kode yang mudah dibaca untuk dicetak. String lebih panjang dari string alfanumerik penuh untuk mengkompensasi penggunaan lebih sedikit simbol

String easy = RandomString.digits + "ACEFGHJKLMNPQRUVWXYabcdefhijkprstuvwx";
RandomString tickets = new RandomString(23, new SecureRandom(), easy);
_

Gunakan sebagai pengidentifikasi sesi

Menghasilkan pengidentifikasi sesi yang cenderung unik tidak cukup baik, atau Anda bisa menggunakan penghitung sederhana. Penyerang membajak sesi saat pengidentifikasi yang dapat diprediksi digunakan

Ada ketegangan antara panjang dan keamanan. Pengidentifikasi yang lebih pendek lebih mudah ditebak, karena kemungkinannya lebih sedikit. Tetapi pengidentifikasi yang lebih lama menghabiskan lebih banyak penyimpanan dan bandwidth. Serangkaian simbol yang lebih besar membantu, tetapi dapat menyebabkan masalah penyandian jika pengidentifikasi disertakan dalam URL atau dimasukkan kembali secara manual

Sumber dasar keacakan, atau entropi, untuk pengidentifikasi sesi harus berasal dari penghasil angka acak yang dirancang untuk kriptografi. Namun, menginisialisasi generator ini terkadang mahal atau lambat secara komputasi, jadi upaya harus dilakukan untuk menggunakannya kembali jika memungkinkan

Gunakan sebagai pengidentifikasi objek

Tidak setiap aplikasi membutuhkan keamanan. Penetapan acak dapat menjadi cara yang efisien bagi banyak entitas untuk menghasilkan pengidentifikasi di ruang bersama tanpa koordinasi atau partisi apa pun. Koordinasi bisa lambat, terutama di lingkungan yang terkelompok atau terdistribusi, dan pemisahan ruang menyebabkan masalah saat entitas berakhir dengan bagian yang terlalu kecil atau terlalu besar

Pengidentifikasi yang dihasilkan tanpa mengambil tindakan untuk membuatnya tidak dapat diprediksi harus dilindungi dengan cara lain jika penyerang dapat melihat dan memanipulasinya, seperti yang terjadi di sebagian besar aplikasi web. Harus ada sistem otorisasi terpisah yang melindungi objek yang pengidentifikasinya dapat ditebak oleh penyerang tanpa izin akses

Kehati-hatian juga harus dilakukan untuk menggunakan pengidentifikasi yang cukup panjang untuk membuat tabrakan tidak mungkin mengingat jumlah total pengidentifikasi yang diantisipasi. Ini disebut sebagai "paradoks ulang tahun. " p, kira-kira n2/(2qx), di mana n adalah jumlah pengenal yang sebenarnya dihasilkan, q adalah jumlah simbol yang berbeda dalam alfabet, dan x adalah panjang pengenal. Ini harus menjadi angka yang sangat kecil, seperti 2‑50 atau kurang

Mengerjakan ini menunjukkan bahwa kemungkinan tabrakan di antara 500k pengidentifikasi 15 karakter adalah sekitar 2-52, yang mungkin lebih kecil kemungkinannya daripada kesalahan yang tidak terdeteksi dari sinar kosmik, dll.

Bandingkan dengan UUID

Menurut spesifikasinya, tidak dirancang agar tidak dapat diprediksi, dan sebaiknya tidak digunakan sebagai pengidentifikasi sesi

UUID dalam format standarnya memakan banyak ruang. 36 karakter hanya untuk 122 bit entropi. (Tidak semua bit UUID "acak" dipilih secara acak. ) String alfanumerik yang dipilih secara acak mengemas lebih banyak entropi hanya dalam 21 karakter

UUID tidak fleksibel; . Ini adalah kebajikan utama sekaligus kelemahan utama mereka. Saat berkolaborasi dengan pihak luar, standarisasi yang ditawarkan oleh UUID mungkin bisa membantu. Untuk penggunaan internal murni, mereka bisa menjadi tidak efisien

C ++ - Cara mengulangi kata-kata dari sebuah string

Saya menggunakan ini untuk memisahkan string dengan pembatas. Yang pertama menempatkan hasilnya dalam vektor yang telah dibuat sebelumnya, yang kedua mengembalikan vektor baru

#include <string>
#include <sstream>
#include <vector>
#include <iterator>

template <typename Out>
void split(const std::string &s, char delim, Out result) {
    std::istringstream iss(s);
    std::string item;
    while (std::getline(iss, item, delim)) {
        *result++ = item;
    }
}

std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, std::back_inserter(elems));
    return elems;
}
_

Perhatikan bahwa solusi ini tidak melewatkan token kosong, jadi berikut ini akan menemukan 4 item, salah satunya kosong

Bagaimana cara menghapus karakter non alfanumerik di mysql?

Fungsi bernama 'RemoveNonAlphaNumeric' menghapus semua karakter non-alfanumerik dari sebuah string . Untuk memeriksa, sekarang kita akan memanggil fungsi yang ditentukan pengguna. mysql>pembatas ; . ',RemoveNonAlphaNumeric('Id Email saya adalah test@123.

Bagaimana cara menghapus non

Untuk menghapus semua karakter non-numerik dari sebuah string, fungsi replace() digunakan . JavaScript ganti () Fungsi. Fungsi ini mencari string untuk nilai tertentu, atau RegExp, dan mengembalikan string baru tempat penggantian dilakukan.

Bagaimana cara menghapus karakter khusus dari string di mysql?

Anda dapat menghapus karakter khusus dari bidang basis data menggunakan fungsi REPLACE() .

Bagaimana cara menggunakan Regexp_replace di mysql?

Fungsi MySQL REGEXP_REPLACE() digunakan untuk pencocokan pola. .
mysql> SET @str = 'BBA BCA BBA BCA BBA';
mysql> SELECT @str AS 'String Asli',
REGEXP_REPLACE(@str, 'BBA', 'MCA', 2, 2) SEBAGAI 'String yang Dapat Diganti';