sql - 尽管函数定义中有 RETURN 语句,但 Postgres 查询没有结果数据的目的地
问题描述
我创建了一个生成 HH:MM 时间戳并将其保存为函数的代码。但是当我尝试调用它时SELECT random_timestamp();
返回错误->
查询没有结果数据的目的地
CREATE OR REPLACE FUNCTION random_timestamp()
RETURNS text AS
'
BEGIN
SELECT
CASE
WHEN Length(s1.hours) = 1
AND Length(s1.minutes) = 1 THEN Concat(''0'',s1.hours, '':'',''0'', s1.minutes)
WHEN Length(s1.hours) = 1
AND Length(s1.minutes) = 2 THEN Concat(''0'',s1.hours, '':'', s1.minutes)
WHEN Length(s1.hours) = 2
AND Length(s1.minutes) = 1 THEN Concat(s1.hours, '':'', ''0'', s1.minutes)
ELSE Concat(s1.hours, '':'', s1.minutes)
END
FROM (SELECT floor(Random() * (23-0-1) + 0)::text AS hours ,
floor(random() * (59-0-1) + 0)::text AS minutes) AS s1;
RETURN(SELECT random_timestamp());
END;
'
language 'plpgsql';
解决方案
您实际上并不需要 PL/pgSQL。一个简单的 SQL 函数就可以了:
CREATE OR REPLACE FUNCTION random_timestamp()
RETURNS text
LANGUAGE sql
AS
$function$
SELECT
CASE
WHEN Length(s1.hours) = 1
AND Length(s1.minutes) = 1 THEN Concat('0',s1.hours, ':','0', s1.minutes)
WHEN Length(s1.hours) = 1
AND Length(s1.minutes) = 2 THEN Concat('0',s1.hours, ':', s1.minutes)
WHEN Length(s1.hours) = 2
AND Length(s1.minutes) = 1 THEN Concat(s1.hours, ':', '0', s1.minutes)
ELSE Concat(s1.hours, ':', s1.minutes)
end
FROM (SELECT floor(Random() * (23-0-1) + 0)::text AS hours ,
floor(random() * (59-0-1) + 0)::text AS minutes) AS s1;
$function$
;
但是你把这个复杂化了。如果要生成随机时间值,可以使用:
select time '00:00' + make_interval(mins => (random() * 1440)::int)
如果需要,您可以将其放入函数中:
create or replace function random_time()
returns time
as
$$
select time '00:00' + make_interval(mins => (random() * 1440)::int);
$$
language sql;
如果你真的需要一个text
值,你可以使用to_char()
select to_char(random_time(), 'hh24:mi')
你的
推荐阅读
- json - Spring Boot REST 多部分请求(文件 + json)抛出 415 Unsupported Media Type 异常
- python-3.x - 消息序列在 RabbitMQ 中意外运行
- sql-server - 如何使用流分析更新数据 Azure SQL 数据库?
- javascript - 如何动态使用ng-for获取输入框和复选框
- javascript - 将光标保持在文本区域中时隐藏移动键盘
- couchdb - CouchDB 按日期过滤会跳过某些日期
- mimekit - 无法使用智能卡上的私钥创建 CmsSigner
- javascript - 如何在两个不同的接口之间建立 socket.io 连接?
- angular - Angular中移动设备和桌面的不同布局/路线
- c++ - 如何使用 AWS api-gateway C++ 开发工具包