Задача - получить множество случайных имен в SQL в виде Иван Иванович Иванов. Используем следующую процедуру, где вы можете добавить свой список имен, фамилий и отчеств: create or alter PROCEDURE [dbo].as_fioGenerator @isWom...

Как сгенерировать различные ФИО в SQL Server

Время чтения - 1 мин.Дата публикации 21.08.2021 (обновлено 25.10.2022)

Задача - получить множество случайных имен в SQL в виде Иван Иванович Иванов. 

Используем следующую процедуру, где вы можете добавить свой список имен, фамилий и отчеств: 

create or alter PROCEDURE [dbo].as_fioGenerator
	 @isWoman bit = 0,
	 @withF bit = 1,
	 @withI bit = 1,
	 @withO bit = 1
AS
BEGIN
	declare @res nvarchar(max) = ''

	declare @fm nvarchar(max) = 'Иванов,Петров,Сидоров,Комаров,Смирнов,Сергеев,Никитин,Абрамов,Ильин,Лавров,Зеленин'
	declare @im nvarchar(256) = 'Кирилл,Евгений,Семен'
	declare @om nvarchar(256) = 'Петрович,Анатольевич,Дмитриевич,Иванович,Сергеевич,Павлович,Ильич,Михайлович'

	declare @fw nvarchar(max) = 'Иванова,Петрова,Сидорова,Комарова,Смирнова,Сергеева,Никитина,Абрамова,Ильина,Лаврова,Зеленина'
	declare @iw nvarchar(256) = 'Ольга,Ирина,Яна,Жанна,Наталья,Марина,Мария,Елизавета,Евгения,Ксения,Оксана'
	declare @ow nvarchar(256) = 'Петровна,Анатольевна,Дмитриевна,Ивановна,Сергеевна,Павловна,Михайловна'


	declare @f nvarchar(max) = iif(@isWoman=1,  @fw,  @fm)
	declare @i nvarchar(max) = iif(@isWoman=1,  @iw,  @im)
	declare @o nvarchar(max) = iif(@isWoman=1,  @ow,  @om)

	if(@withF=1) begin
		set @res = @res + iif(@res='', '', ' ') + (select top 1 Value from dbo.split(@f,',') order by newid())
	end
	if(@withI=1) begin
		set @res = @res + iif(@res='', '', ' ') + (select top 1 Value from dbo.split(@i,',') order by newid())
	end
	if(@withO=1) begin
		set @res = @res + iif(@res='', '', ' ') + (select top 1 Value from dbo.split(@o,',') order by newid())
	end

	select @res
END

Функция SPLIT (разбивает строку с разделителями на таблицу): 

CREATE OR ALTER FUNCTION [dbo].[split] ( @stringToSplit NVARCHAR(MAX), @char NVarCHAR)

RETURNS
 @returnList TABLE ([value] [nvarchar] (max), num int)
AS
BEGIN

Declare  @r1 TABLE ([value] [nvarchar] (max), num int)

 DECLARE @name NVARCHAR(max)
 DECLARE @pos INT
 declare  @index int = 1

 WHILE CHARINDEX(@char, @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(@char, @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @r1 
  SELECT @name, @index

  set @index = @index  + 1

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @r1
 SELECT @stringToSplit, @index


 insert into @returnList 
 select [Value], num from  @r1 order by num

 RETURN
END

Использование: 

exec [dbo].as_fioGenerator - мужские ФИО

exec [dbo].as_fioGenerator @isWoman = 1 - женские ФИО

exec [dbo].as_fioGenerator @isWoman = 1, @withF = 1, @withI = 1, @withO = 0 - женские Фамилия и Имя

exec [dbo].as_fioGenerator @isWoman = 0, @withF = 0, @withI = 1, @withO = 0 - мужские Имена

Насколько полезной была статья?

Что еще посмотреть по SQL Server

Скрипт бекапа базы и восстановления из бекапа

SQL запрос для получения всех текущих выполняющихся запросов на базе

Запрос для поиска проблемных SQL по процессору

Как сделать поиск по всем таблицам базы данных SQL Server

Поиск строки во всех хранимых процедурах SQL Server

SQL Проверка валидности email

Как писать запросы с колонкой по временным интервалам (неделя, месяц, квартал, год)

Получить части пути к файлу (расширение, путь, название файла)

Из строки в Base64 и обратно в SQL Server (с учетом кирилицы)

Ищем партнеров-разработчиков на T-SQL и PL/pgSQL

Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML

Falcon Space - платформа для создания сайтов с личными кабинетами

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Запрос расчета стоимости веб-проекта на базе Falcon Space
Если видео Youtube плохо грузится, то попробуйте найти видео в ВК видео на канале Falcon Space
Сайт использует Cookie, Яндекс Метрику. Используя сайт, вы соглашаетесь с правилами сайта. См. Правила конфиденциальности и Правила использования сайта OK