@YakovSpb

Как перемешать символы в сроке?

Как мне перемещать буквы в конечной строке пароля?
SELECT string_agg(concat(
  substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil(random() * 26)::integer, 1),
  substring('abcdefghijklmnopqrstuvwxyz', ceil(random() * 26)::integer, 1),
  substring('0123456789', ceil(random() * 10)::integer, 1),
  substring('!#$%&()*+,-./:;<=>?@[]^', ceil(random() * 23)::integer, 1)
), '') 
FROM generate_series(1,8);
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Akina
Сетевой и системный админ, SQL-программист.
Ну так перемешай...
SELECT string_agg(concat(substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil(random() * 26)::integer, 1),
                         substring('abcdefghijklmnopqrstuvwxyz', ceil(random() * 26)::integer, 1),
                         substring('0123456789', ceil(random() * 10)::integer, 1),
                         substring('!#$%&()*+,-./:;<=>?@[]^', ceil(random() * 23)::integer, 1)
                         ),
                  '' ORDER BY RANDOM()
                  ) 
FROM generate_series(1,8);
Ответ написан
ScriptKiddo
@ScriptKiddo
SELECT string_agg(unnest, '') FROM(

select * FROM (select unnest(string_to_array(string_agg(concat(
  substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil(random() * 26)::integer, 1),
  substring('abcdefghijklmnopqrstuvwxyz', ceil(random() * 26)::integer, 1),
  substring('0123456789', ceil(random() * 10)::integer, 1),
  substring('!#$%&()*+,-./:;<=>?@[]^', ceil(random() * 23)::integer, 1)
), ''), NULL)) FROM generate_series(1,8)) x ORDER BY RANDOM()) as random_chars


Держи, только никому это не показывай XD

SQL Fiddle
Ответ написан
Комментировать
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Ваша настойчивость впечатляет:
select string_agg(substring, '') from (
  SELECT 
	  substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil(random() * 26)::integer, 1)
  FROM generate_series(1,12) -- 12 capital letters
  union
  SELECT 
	  substring('abcdefghijklmnopqrstuvwxyz', ceil(random() * 26)::integer, 1)
  FROM generate_series(1,12) -- 12 low case letters 
  union
  SELECT 
	  substring('0123456789', ceil(random() * 10)::integer, 1)
  FROM generate_series(1,6) -- 6 digits
  union
  SELECT 
	  substring('!#$%&()*+,-./:;<=>?@[]^', ceil(random() * 23)::integer, 1)
  FROM generate_series(1,2) -- 2 other chars
) seria;


PostgreSQL fiddle
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы