Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dapatkan hitungan nol dalam bilangan bulat menggunakan MySQL

Anda dapat membandingkan panjang string dengan dan tanpa karakter yang ingin Anda hitung.

Solusi menggunakan LENGTH

-- 0 in 10090: 3
-- 0 in 10000: 4
SELECT 
   (LENGTH(number) - LENGTH(REPLACE(number, '0', ''))) AS char_count
FROM dual;

Solusi yang lebih baik dan lebih aman adalah dengan menggunakan CHAR_LENGTH fungsi alih-alih LENGTH fungsi. Dengan CHAR_LENGTH fungsi Anda juga dapat menghitung karakter multi-byte (seperti § ).

Solusi menggunakan CHAR_LENGTH

-- § in 100§0: 1
SELECT 
    (CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '§', ''))) AS char_count
FROM dual;

Anda juga dapat memperluas solusi di atas untuk menghitung nilai string menggunakan banyak karakter.

-- 12 in 10120012: 2
SELECT number,
  FLOOR((CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '12', ''))) / CHAR_LENGTH('12')) AS str_count
FROM dual;

demo di dbfiddle.uk

Di MySQL, Anda dapat membuat fungsi untuk menggunakan logika di atas dengan cara yang lebih sederhana:

CREATE FUNCTION GetStringCount(strValue VARCHAR(255), strSearchValue VARCHAR(255))
RETURNS INT DETERMINISTIC NO SQL
RETURN FLOOR((CHAR_LENGTH(strValue) - CHAR_LENGTH(REPLACE(strValue, strSearchValue, ''))) / CHAR_LENGTH(strSearchValue));

Anda dapat menggunakan fungsi baru ini GetStringCount seperti ini:

-- example to count non-multi-byte character (here 0).
-- 0 in 10090: 3
-- 0 in 10000: 4
SELECT number, GetStringCount(number, '0') AS strCount
FROM dual;

-- example to count multi-byte character (here §).
-- § in 100§0: 1
SELECT number, GetStringCount(number, '§') AS strCount
FROM dual;

-- example to count a string with multiple characters.
-- 12 in 10120012: 2
SELECT number, GetStringCount(number, '12') AS strCount
FROM dual;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT vs UPDATE kinerja dengan indeks

  2. Bagaimana cara mengoptimalkan kueri MYSQL EAV yang rumit ini?

  3. Pilih waktu antara dua kali mysql

  4. Apakah MySQL memungkinkan untuk membuat database dengan titik?

  5. PILIH catatan terbaru dengan nilai bukan nol dalam satu kolom