我对postgresql很新,我想知道如何创建一个能够生成(888)888-8888格式的随机电话号码的功能。我甚至无法知道如何做到这一点,所以如果有人有任何反馈会很好。
答案 0 :(得分:2)
以请求的格式生成单个完全随机的数字:
SELECT format('(%s%s%s) %s%s%s-%s%s%s%s'
, a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10])
FROM (
SELECT ARRAY (
SELECT trunc(random() * 10)::int
FROM generate_series(1, 10)
) AS a
) sub;
返回:
(213) 633-4337
或类似。
答案 1 :(得分:1)
我在想这个:
select replace(replace(replace('(@n1) @n2-@n3),
'@n1', lpad((random()*1000)::int::text, 3, '0')
), '@n2', lpad((random()*1000)::int::text, 3, '0')
), lpad((random()*10000)::int::text, 4, '0')
)
即,使用三个不同的随机数,每个分组一个。
如果您不允许一个或多个元素以零开头,则算法会略有不同。
答案 2 :(得分:0)
不是最优雅的代码,但它非常简单,所以应该给你一个工作的基础:
SELECT '('
|| (RANDOM() * 9)::INT
|| (RANDOM() * 9)::INT
|| (RANDOM() * 9)::INT
|| ') '
|| (RANDOM() * 9)::INT
|| (RANDOM() * 9)::INT
|| (RANDOM() * 9)::INT
|| '-'
|| (RANDOM() * 9)::INT
|| (RANDOM() * 9)::INT
|| (RANDOM() * 9)::INT
|| (RANDOM() * 9)::INT;
答案 3 :(得分:0)
select regexp_replace(CAST (random() AS text),'^0\.(\d{3})(\d{3})(\d{4}).*$','(\1)\2-\3') AS random;
random()函数用于生成0到1之间的随机数。然后 CAST 为文本并且< strong> regexp_replace 用于添加格式化字符。
更新为使用一些任意数字填充字符串:
select regexp_replace(rpad(CAST (random() AS text),12,CAST(random() AS text)),'^0\.(\d{3})(\d{3})(\d{4}).*$','(\1)\2-\3') AS random;
无法保证这会产生有效的电话号码 - 例如区号不能从零或一开始,但如果您只需要快速填写一些数字,这应该可以解决问题。