Postgresql - 生成随机电话号码的功能

时间:2016-04-04 01:39:16

标签: sql postgresql computer-science

我对postgresql很新,我想知道如何创建一个能够生成(888)888-8888格式的随机电话号码的功能。我甚至无法知道如何做到这一点,所以如果有人有任何反馈会很好。

4 个答案:

答案 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;

无法保证这会产生有效的电话号码 - 例如区号不能从零或一开始,但如果您只需要快速填写一些数字,这应该可以解决问题。