@@ -536,3 +536,90 @@ SELECT n, random(0, trim_scale(abs(1 - 10.0^(-n)))) FROM generate_series(-20, 20
536536 20 | 0.60795101234744211935
537537(41 rows)
538538
539+ -- random dates
540+ SELECT random('1979-02-08'::date,'2025-07-03'::date) AS random_date_multiple_years;
541+ random_date_multiple_years
542+ ----------------------------
543+ 04-09-1986
544+ (1 row)
545+
546+ SELECT random('4714-11-24 BC'::date,'5874897-12-31 AD'::date) AS random_date_maximum_range;
547+ random_date_maximum_range
548+ ---------------------------
549+ 10-02-2898131
550+ (1 row)
551+
552+ SELECT random('1979-02-08'::date,'1979-02-08'::date) AS random_date_empty_range;
553+ random_date_empty_range
554+ -------------------------
555+ 02-08-1979
556+ (1 row)
557+
558+ SELECT random('2024-12-31'::date, '2024-01-01'::date); -- fail
559+ ERROR: lower bound must be less than or equal to upper bound
560+ SELECT random('-infinity'::date, '2024-01-01'::date); -- fail
561+ ERROR: lower and upper bounds must be finite
562+ SELECT random('2024-12-31'::date, 'infinity'::date); -- fail
563+ ERROR: lower and upper bounds must be finite
564+ -- random timestamps
565+ SELECT random('1979-02-08'::timestamp,'2025-07-03'::timestamp) AS random_timestamp_multiple_years;
566+ random_timestamp_multiple_years
567+ ---------------------------------
568+ Fri Jan 27 18:52:05.366009 2017
569+ (1 row)
570+
571+ SELECT random('4714-11-24 BC'::timestamp,'294276-12-31 23:59:59.999999'::timestamp) AS random_timestamp_maximum_range;
572+ random_timestamp_maximum_range
573+ -----------------------------------
574+ Wed Mar 28 00:45:36.180395 226694
575+ (1 row)
576+
577+ SELECT random('2024-07-01 12:00:00.000001'::timestamp, '2024-07-01 12:00:00.999999'::timestamp) AS random_narrow_range;
578+ random_narrow_range
579+ ---------------------------------
580+ Mon Jul 01 12:00:00.999286 2024
581+ (1 row)
582+
583+ SELECT random('1979-02-08'::timestamp,'1979-02-08'::timestamp) AS random_timestamp_empty_range;
584+ random_timestamp_empty_range
585+ ------------------------------
586+ Thu Feb 08 00:00:00 1979
587+ (1 row)
588+
589+ SELECT random('2024-12-31'::timestamp, '2024-01-01'::timestamp); -- fail
590+ ERROR: lower bound must be less than or equal to upper bound
591+ SELECT random('-infinity'::timestamp, '2024-01-01'::timestamp); -- fail
592+ ERROR: lower and upper bounds must be finite
593+ SELECT random('2024-12-31'::timestamp, 'infinity'::timestamp); -- fail
594+ ERROR: lower and upper bounds must be finite
595+ -- random timestamps with timezone
596+ SELECT random('1979-02-08 +01'::timestamptz,'2025-07-03 +02'::timestamptz) AS random_timestamptz_multiple_years;
597+ random_timestamptz_multiple_years
598+ -------------------------------------
599+ Tue Jun 14 04:41:16.652896 2016 PDT
600+ (1 row)
601+
602+ SELECT random('4714-11-24 BC +00'::timestamptz,'294276-12-31 23:59:59.999999 +00'::timestamptz) AS random_timestamptz_maximum_range;
603+ random_timestamptz_maximum_range
604+ --------------------------------------
605+ Wed Mar 26 14:07:16.980265 31603 PDT
606+ (1 row)
607+
608+ SELECT random('2024-07-01 12:00:00.000001 +04'::timestamptz, '2024-07-01 12:00:00.999999 +04'::timestamptz) AS random_timestamptz_narrow_range;
609+ random_timestamptz_narrow_range
610+ -------------------------------------
611+ Mon Jul 01 01:00:00.835808 2024 PDT
612+ (1 row)
613+
614+ SELECT random('1979-02-08 +05'::timestamptz,'1979-02-08 +05'::timestamptz) AS random_timestamptz_empty_range;
615+ random_timestamptz_empty_range
616+ --------------------------------
617+ Wed Feb 07 11:00:00 1979 PST
618+ (1 row)
619+
620+ SELECT random('2024-01-01 +06'::timestamptz, '2024-01-01 +07'::timestamptz); -- fail
621+ ERROR: lower bound must be less than or equal to upper bound
622+ SELECT random('-infinity'::timestamptz, '2024-01-01 +07'::timestamptz); -- fail
623+ ERROR: lower and upper bounds must be finite
624+ SELECT random('2024-01-01 +06'::timestamptz, 'infinity'::timestamptz); -- fail
625+ ERROR: lower and upper bounds must be finite
0 commit comments