sql >> Database >  >> RDS >> PostgreSQL

Maak een Postgres-regel of trigger om een ​​kolom automatisch te converteren naar kleine letters of hoofdletters bij invoegen

Deze oplossing is getest en werkt in Postgres 9.1

Ik gebruikte triggers om problemen op te lossen.

Hier is de volledige code zodat je deze in postgres kunt plakken en het zelf kunt uitproberen en uitleg over hoe het werkt hieronder

DROP TABLE foobar;
CREATE TABLE foobar (
foo text,
bar int
);

CREATE OR REPLACE FUNCTION lowecase_foo_on_insert() RETURNS trigger AS $lowecase_foo_on_insert$
    BEGIN        
        NEW.foo = LOWER(NEW.foo);
        RETURN NEW;
    END;
$lowecase_foo_on_insert$ LANGUAGE plpgsql;

CREATE TRIGGER lowecase_foo_on_insert_trigger BEFORE INSERT OR UPDATE ON foobar
    FOR EACH ROW EXECUTE PROCEDURE lowecase_foo_on_insert();

INSERT INTO foobar (foo, bar) VALUES ('LOWERCASE ME', 1);

SELECT * FROM foobar; //result 'lowercase me'

Maak onze demotabel:

CREATE TABLE foobar (
    foo text,
    bar int
);

Functie maken die (foo) naar kleine letters converteert:

CREATE OR REPLACE FUNCTION lowecase_foo_on_insert() RETURNS trigger AS $lowecase_foo_on_insert$
    BEGIN        
        NEW.foo = LOWER(NEW.foo);
        RETURN NEW;
    END;
$lowecase_foo_on_insert$ LANGUAGE plpgsql;

Maak een trigger die code uitvoert in kleine letters foo voordat deze wordt ingevoegd:

CREATE TRIGGER lowecase_foo_on_insert_trigger BEFORE INSERT OR UPDATE ON foobar
    FOR EACH ROW EXECUTE PROCEDURE lowecase_foo_on_insert();

En nu ons werk testen:

INSERT INTO foobar (foo, bar) VALUES ('LOWERCASE ME', 1);
SELECT * FROM foobar;

Het resultaat is dat de enige rij in kolom foo nu is ingesteld op 'kleine letter mij'



  1. MySQL-query voor het verkrijgen van telling per uur

  2. Controleer of kolomtekenreeks in database een subtekenreeks is van een query in sqlite

  3. MySql Bulk-invoeging

  4. Wat is een goede manier om alle witruimtetekens van een string in T-SQL zonder UDF en zonder CLR te trimmen?