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

Postgresql regexp_replace

    CASEを使用できます 年を抽出してテストし、年が目的の範囲内にある場合にのみ置き換える式:

    with test_data (col1) as (
      values ('sdfg 2000'), ('foo 1983'), ('bar 2010'), ('bla 1940')
    )
    select col1, 
           case 
             when nullif(regexp_replace(col1, '[^0-9]+',''),'')::int between 1990 and 2050 
                  then regexp_replace(col1, '\d{4}', '', 'g')
             else col1 
           end as replaced
    from test_data;
    

    結果:

    col1      | replaced
    ----------+---------
    sdfg 2000 | sdfg    
    foo 1983  | foo 1983
    bar 2010  | bar     
    bla 1940  | bla 1940
    

    nullif(..) 数値を含まない値には必要です。そのような値がない場合は、省略できます。



    1. MYSQL最後の5つの異なるレコードに対して5つのレコードを選択します

    2. mysqlcreatetableの名前でphp変数を使用します

    3. OracleSQLSelectをPostgreSQLselectに変換する

    4. 3つのMySQLクエリを1つに組み合わせる方法は?