SQL 서버 기능 convert
과 동일한 Postgres 기능이 필요합니다. 내가 함수 select convert('int','1',0)
로 함수를 호출하는 동안Postgresql SQL Server 기능에 해당하는 변환
CREATE OR REPLACE FUNCTION convert (target VARCHAR(50),source ANYELEMENT,style INT) RETURNS ANYELEMENT
AS
$$ BEGIN
CASE
when style=0 then CASE
WHEN target ='int' THEN return source::int;
WHEN target ='smallint' or target = 'tinyint' THEN return source::smallint;
WHEN target ='bigint' THEN return source::bigint;
WHEN target ='numeric' or target = 'real' or target = 'float' THEN return source::double precision;
WHEN target ='smallmoney' or target = 'money' or target = 'decimal' THEN return source::double precision;
WHEN target ='char' THEN return source::char;
WHEN target ='datetime' or target = 'smalldatetime' then return source::timestamp;
WHEN target like 'varchar%' or target like 'nvarchar%' THEN return source::varchar;
WHEN target = 'text' or target like 'ntext' THEN return source::text;
WHEN target = 'timestamp' THEN return source::varchar(30);
WHEN target = 'binary' or target='varbinary' THEN return source::bytea;
WHEN target = 'uniqueidentifier' THEN return source::varchar(37);
WHEN target = 'sysname' THEN return source::varchar(128);
WHEN target = 'sql_variant' THEN return varchar;
WHEN target = 'bit' THEN if source::varchar='1' THEN return true; ELSIF source::varchar='0' THEN return false; else RAISE EXCEPTION 'Invalid value for Input boolean'; END IF;
ELSE return source::anyelement;
END CASE;
when style!=0 then CASE
WHEN (style = 0 OR style = 100) THEN return to_timestamp(source::text,'mon dd yyyy hh:miAM');
WHEN style = 1 THEN return to_timestamp(source::text,'mm/dd/yy');
WHEN style = 101 THEN return to_timestamp(source::text,'mm/dd/yyyy');
..
..
END CASE;
END CASE;
END;
$$ LANGUAGE plpgsql;
를 작성 결국, 다음과 같은 오류가 발생합니다 :
"ERROR: could not determine polymorphic type because input has type "unknown" 1 statement failed."
내가 변환 ('INT'로 두 번째 매개 변수의 명시 적 캐스팅을 수행 할 때 ' 1 ':: text, 0), 작동합니다. 하지만 추가 캐스팅을하지 않고 전화해야합니다. 누군가 도울 수 있습니까?
정확히 MS-SQL Server의'convert' 함수가 복제하려고하는 것이 무엇이며, 왜 필요합니까? –
필요시'to_char' /'to_timestamp' 옵션과 함께'CAST'를 사용하지 않는 것이 어떨까요? - ''1 ''문자가 unknown (https://www.postgresql.org/message-id/183.1302200970%40sss.pgh.pa.us) 타입이기 때문에 원하는 것은 PostgreSQL에서 작동하지 않습니다. 항상 유형 정보를 제공해야합니다. 형식화 된 리터럴 구문'int '1' 또는 캐스트''1 ':: int' 또는'CAST ('1 'AS int)'중 하나입니다. 준비된 명령문을 사용하고 바인딩을 통해 유형 정보를 제공하면 (어쨌든해야 함) 캐스트를 사용할 필요가 없습니다. – pozs