From: | "Ignacio Balcarce" <ignacio(dot)balcarce(at)vivatia(dot)com> |
---|---|
To: | <pgsql-sql(at)postgresql(dot)org> |
Subject: | MSSQL to PostgreSQL - Issue trying to generate unique ID using actual date |
Date: | 2010-03-17 14:52:53 |
Message-ID: | 000001cac5e1$8851dbe0$98f593a0$@balcarce@vivatia.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Hi all,
I am facing a problem trying to convert from MSSQL procedure to PostgreSQL
function.
CREATE PROCEDURE dbo.THUBAN_SP_GENERATEID
@NEWID VARCHAR(20) OUTPUT
AS
SET @NEWID = (
SELECT
REPLACE(SUBSTRING(CONVERT(CHAR(10),GETDATE(),20 ),1,10),'-','')
+ CAST(REPLICATE(0,8-LEN
(ISNULL(CAST(SUBSTRING(MAX(SEQ_ID),9,8) AS
INTEGER),0) + 1)) AS VARCHAR)
+
CAST(ISNULL(CAST(SUBSTRING(MAX(SEQ_ID),9,8) AS INTEGER),0) + 1 AS
VARCHAR)
FROM THUBAN_SEQ
WHERE SUBSTRING(SEQ_ID,1,8)=
REPLACE(SUBSTRING(CONVERT(CHAR(10),GETDATE(),20 ),1,10),'-','')
)
INSERT INTO THUBAN_SEQ VALUES (@NEWID)
SELECT @NEWID AS ITEM_ID;
GO
This is what I made,
CREATE OR REPLACE FUNCTION THUBAN_SP_GENERATEID()
RETURNS VARCHAR
AS $$
DECLARE NEWID VARCHAR;
DECLARE SEQID VARCHAR;
BEGIN
SELECT INTO NEWID TO_CHAR(CURRENT_DATE::DATE, 'YYYYMMDD');
-- IF EXISTS A ROW IN THE TABLE STARTING WITH THE
CURRENT_DATE, SELECT THE MAX OF THEM.
IF EXISTS(SELECT(MAX(SEQ_ID)) FROM THUBAN_SEQ WHERE SEQ_ID
LIKE (SELECT TO_CHAR(CURRENT_DATE::DATE, 'YYYYMMDD') || '%')) THEN
SELECT INTO NEWID ((SELECT(MAX(SEQID)) FROM
THUBAN_SEQ WHERE SEQ_ID LIKE NEWID || '%') + 1);
ELSE
-- THIS IS NOT RIGHT AT ALL, RIGHT? HOW CAN I
DO TO CONCATENATE AN INTEGER NUMBER LIKE 14 + SOME NUMBER OF 0 BEFORE?
SEQID := '00000001';
NEWID := NEWID + SEQID;
END IF;
RETURN NEWID;
END;
$$ LANGUAGE plpgsql;
SELECT THUBAN_SP_GENERATEID();
Beside this, there is something than I would like to ask than I couldn't
find. How can I do to set a variable in a way like this as MSSQL does:
SET @NEWID = (SELECT..
And not doing SELECT INTO VARIABLE_TO_SET (SELECT...
All comments will be welcome, I am pretty new with PostgreSQL but I find It
very interesting.
Thanks & Regards,
Ignacio
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Gould | 2010-03-17 16:29:23 | strange issue with UUID data types |
Previous Message | Osvaldo Kussama | 2010-03-17 14:48:06 | Re: 8.4 versus 8.2 against nonexistent column "name" ... |