sql >> データベース >  >> RDS >> Mysql

MySQLを使用して整数のゼロの数を取得する

    カウントする文字がある場合とない場合の文字列の長さを比較できます。

    LENGTH

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

    より適切で安全な解決策は、を使用することです。 CHAR_LENGTH LENGTH> 働き。 CHAR_LENGTHを使用 マルチバイト文字をカウントすることもできる関数(§など) 。

    CHAR_LENGTHを使用したソリューション

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

    上記のソリューションを拡張して、複数の文字を使用して文字列値をカウントすることもできます。

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

    dbfiddle.ukのデモ

    MySQLでは、関数を作成 できます。 上記のロジックをより簡単な方法で使用するには:

    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));
    

    この新しい関数GetStringCountを使用できます このように:

    -- 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. centos7のmariadb10でopen-files-limitを増やすことはできません

    2. タクシーサービスのデータベースモデル

    3. mysqlが一意キーをプライマリに変更(mariadb)

    4. MYSQLでNow()から過去7日間を選択する