【postgresql】SQL自定义函数()

--生成指定位数随机数
create or replace function gen_id(n BIGINT) RETURNS VARCHAR AS $$
DECLARE
	i_num INTEGER;
	v_result VARCHAR;
BEGIN
	v_result:='';
FOR 
	i_num IN 1..n
LOOP
	v_result:=v_result||(random()*(9))::integer::varchar;
END LOOP;
RETURN v_result;
END;
$$ language plpgsql;

--生成随机日期
CREATE OR REPLACE FUNCTION gen_date() RETURNS DATE AS  
$BODY$  
DECLARE
		v_result VARCHAR;
BEGIN
		v_result:='20'||lpad((random()*18)::int::text, 2, '0')||'-'||lpad((random()*12)::int::text, 2, '0')||'-'||lpad((random()*30)::int::text, 2, '0');
    RETURN to_date(v_result, 'yyyy-mm-dd');
END;  
$BODY$  
LANGUAGE plpgsql; 

--生成指定范围的随机数
CREATE OR REPLACE FUNCTION gen_number(integer, integer) RETURNS integer AS  
$BODY$  
DECLARE  
    start_int ALIAS FOR $1;  
    end_int ALIAS FOR $2;  
BEGIN  
    RETURN trunc(random() * (end_int-start_int + 1) + start_int);  
END;  
$BODY$  
LANGUAGE plpgsql; 


--生成随机出生日期
create or replace function gen_birthdate() RETURNS VARCHAR AS $$
DECLARE
	v_birthdate VARCHAR;
BEGIN
	v_birthdate:=gen_number(1970, 2010)||'-'||lpad((random()*12)::int::text, 2, '0')||'-'||lpad((random()*30)::int::text, 2, '0');
	RETURN to_date(v_birthdate, 'yyyy-mm-dd');
END;
$$ LANGUAGE plpgsql;

--返回数组中随机值
create or replace function get_array_value_random(a_param text[], i_num INTEGER) RETURNS VARCHAR AS $$
BEGIN
	RETURN a_param[gen_number(1, i_num)];
END;
$$ LANGUAGE plpgsql;

--生成随机地址
create or replace function gen_place() RETURNS VARCHAR AS $$
DECLARE
	v_sheng VARCHAR;
	v_shi VARCHAR;
	i_postion INTEGER;
BEGIN
	i_postion:=gen_number(1,31);
	v_sheng:=get_array_value(ARRAY['北京市','天津市','上海市','重庆市','河北省','山西省','辽宁省','吉林省','黑龙江省','江苏省','浙江省','安徽省','福建省','江西省','山东省','河南省','湖北省','湖南省','广东省','海南省','四川省','贵州省','云南省','陕西省','甘肃省','青海省','内蒙古','广西','西藏','宁夏','新疆'], i_postion);
	v_shi:=get_array_value(ARRAY['朝阳区','狗不理区','徐汇区','火锅区','保定市','运城市','沈阳市','长春市','哈尔滨市','南京市','杭州市','阜阳市','莆田市','南昌市','菏泽市','郑州市','黄石市','长沙市','广州市','海口市','成都市','贵阳市','大理市','西安市','兰州市','西宁市','包头市','桂林市','拉萨市','银川市','吐鲁番市'], i_postion);
	RETURN v_sheng||v_shi||'马家沟子王家村';
END;
$$ LANGUAGE plpgsql;

--生成随机名字
create or replace function gen_name() RETURNS VARCHAR AS $$
DECLARE
	v_name VARCHAR;
BEGIN
	IF (gen_number(1,2)>1) THEN
	v_name:=get_array_value_random(ARRAY['赵','钱','孙','李','周','吴','郑','王','刘','吕','田','司马','邓','许','傅','沈','曾','彭','吕','苏','卢','蒋'], 22)||
	get_array_value_random(ARRAY['公','国','鱼','别','南','逯','惠','吉','桑','经','隗','丰','卿','平','屠','芦','钮','廉','幸','查','訾','宣','濮','阴','容','年','帅','诸','干','步','买','水','寿','利','郗','储','竺'], 37)||
	get_array_value_random(ARRAY['闻','哈','靖','逄','雍','鄂','蓬','历','扈','衡','宓','东','滑','融','汲','通','扶','广','牧','糜','山','家','怀','空','羿','能','璩','宰','看','宦','钭','贲','湛','松','凤','咸','七','堵','归','度','殴','竞'], 42);
	ELSE
	v_name:=get_array_value_random(ARRAY['赵','钱','孙','李','周','吴','郑','王','刘','吕','田','司马','邓','许','傅','沈','曾','彭','吕','苏','卢','蒋'], 22)||
	get_array_value_random(ARRAY['闻','哈','靖','逄','雍','鄂','蓬','历','扈','衡','宓','东','滑','融','汲','通','扶','广','牧','糜','山','家','怀','空','羿','能','璩','宰','看','宦','钭','贲','湛','松','凤','咸','七','堵','归','度','殴','竞'], 42);
	END IF;
	RETURN v_name;
END;
$$ LANGUAGE plpgsql;

--生成随机时间('yyyy-mm-dd hh24:mi:ss')
CREATE OR REPLACE FUNCTION gen_datetime() RETURNS TIMESTAMP AS  
$BODY$  
DECLARE
		v_result VARCHAR;
BEGIN
		v_result:=gen_number(1990, 2017)||'-'||lpad((random()*12)::int::text, 2, '0')||'-'||lpad((random()*30)::int::text, 2, '0') ||' '|| lpad((random()*24)::int::text, 2, '0')||':'||lpad((random()*60)::int::text, 2, '0')||':'||lpad((random()*60)::int::text, 2, '0');
    RETURN to_timestamp(v_result, 'yyyy-mm-dd hh24:mi:ss');
END;  
$BODY$  
LANGUAGE plpgsql; 

--生成随机出生日期8位数
create or replace function gen_birth8() RETURNS VARCHAR AS $$
DECLARE
	v_birth VARCHAR;
BEGIN
	v_birth:=gen_number(1960, 2000)||lpad((random()*12)::int::text, 2, '0')||lpad((random()*30)::int::text, 2, '0');
	RETURN v_birth;
END;
$$ LANGUAGE plpgsql;

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值