Function 如何在EXECUTE format语句中使用timestamp变量

Function 如何在EXECUTE format语句中使用timestamp变量,function,postgresql,timestamp,execute,Function,Postgresql,Timestamp,Execute,我需要一个例子,说明如何在PostgreSQL函数中传递时间戳,并在execute语句中使用它。我举了一个这样的例子: CREATE OR REPLACE FUNCTION ref4(b1 timestamp) RETURNS refcursor AS $$ DECLARE mycurs refcursor; BEGIN OPEN mycurs FOR EXECUTE format('SELECT * FROM myTable WHERE datetime <= '||

我需要一个例子,说明如何在PostgreSQL函数中传递时间戳,并在execute语句中使用它。我举了一个这样的例子:

CREATE OR REPLACE FUNCTION ref4(b1 timestamp) RETURNS refcursor AS $$   
DECLARE 
mycurs refcursor;

BEGIN 
OPEN mycurs FOR 
 EXECUTE format('SELECT * FROM  myTable WHERE  datetime <= '|| b1 ||'ORDER BY datetime' , b1);
RETURN mycurs;
END;$$ 
language plpgsql;

SELECT ref4( '2009/08/28 17:44:46.240' );
CREATE或REPLACE函数ref4(b1时间戳)将refcursor返回为$$
声明
mycurs-refcursor;
开始
打开mycurs以获取

EXECUTE format('从myTable中选择*,其中datetime您需要转义引号:


executeformat('从myTable中选择*,其中datetime您需要转义引号:

executeformat('SELECT*FROM myTable WHERE datetimeReplace:

EXECUTE format('SELECT * FROM  myTable WHERE  datetime <= '|| b1 ||'ORDER BY datetime' , b1);
executeformat('SELECT*FROM myTable WHERE datetimeReplace:

EXECUTE format('SELECT * FROM  myTable WHERE  datetime <= '|| b1 ||'ORDER BY datetime' , b1);
executeformat('SELECT*FROM myTable WHERE datetime如果使用,则应在格式字符串中使用占位符(
%s
%I
%L
),例如:

它不太容易出错,而且您也不会以这种方式处理文本表示形式(format将其参数转换为文本表示形式,execute将根据需要将其转换回,但这也可能导致
未知
类型)

通常,它们也可以混合使用,但前提是存在标识符,标识符来自变量

请注意,如果您的代码如此简单,则不需要执行
EXECUTE
,您可以在函数中的sql语句中使用函数参数(只要它们不与现有列名冲突):

SELECT*FROM myTable WHERE datetime如果使用,则应在格式字符串中使用占位符(
%s
%I
%L
),如:

它不太容易出错,而且您也不会以这种方式处理文本表示形式(format将其参数转换为文本表示形式,execute将根据需要将其转换回,但这也可能导致
未知
类型)

通常,它们也可以混合使用,但前提是存在标识符,标识符来自变量

请注意,如果您的代码如此简单,则不需要执行
EXECUTE
,您可以在函数中的sql语句中使用函数参数(只要它们不与现有列名冲突):


SELECT*FROM myTable WHERE datetime感谢您的勾选,但我更喜欢@Houari的答案!感谢您的勾选,但我更喜欢@Houari的答案!
SELECT format('SELECT * FROM  myTable WHERE datetime <= %L ORDER BY datetime' , b1);
EXECUTE 'SELECT * FROM  myTable WHERE datetime <= $1 ORDER BY datetime' USING b1;
SELECT * FROM  myTable WHERE datetime <= b1 ORDER BY datetime