0

I have a transactions table with a name field that has values like these:

  • TX-0000001306
  • TX-0000001307

They are currently created by a server-side script, with the below logic:

var zeros = '0000000000'+(Number(transactionCount) + 1);
return 'TX-'+zeros.substr(zeros.length - 10);

Because I pull the current number of transactions from the database every time I create this number, I no longer want to use it.

I now want to do this with postgres triggers. I have gotten very close to a solution, but I'm unable to figure out how to prepend leading zeros that is being offset by the number. For simplicity, I am using the id field which auto increments.

CREATE OR REPLACE FUNCTION getTransactionName()
RETURNS "trigger" AS
$BODY$
BEGIN
 NEW.name:= CONCAT('TX-', NEW.id);
 Return NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE; 

CREATE TRIGGER createTransactionName
  BEFORE INSERT ON transaction__c
  FOR EACH ROW
  EXECUTE PROCEDURE getTransactionName();

The above trigger produces this:

  • TX-1701
  • TX-1702

How can I get it into a 10-digit format?

  • TX-0000001701
  • TX-0000001702
JM-AGMS
  • 1,670
  • 1
  • 15
  • 33

1 Answers1

0

Well, I managed to figure it out. The key thing I needed was to_char().

CREATE OR REPLACE FUNCTION getTransactionName()
RETURNS "trigger" AS
$BODY$
BEGIN
 NEW.name:= CONCAT('TX-', to_char(NEW.id, 'fm0000000000'));
 Return NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE; 

Thanks to the combined answers:

JM-AGMS
  • 1,670
  • 1
  • 15
  • 33