Как сгенерировать различные ФИО в SQL Server
Время чтения - 2 мин.Дата публикации 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 Server
Поиск строки во всех хранимых процедурах SQL Server
Скрипт бекапа базы и восстановления из бекапа
SQL запрос для получения всех текущих выполняющихся запросов на базе
Запрос для поиска проблемных SQL по процессору
Как писать запросы с колонкой по временным интервалам (неделя, месяц, квартал, год)
Получить части пути к файлу (расширение, путь, название файла)
Из строки в Base64 и обратно в SQL Server (с учетом кирилицы)
Дополнительный заработок для разработчиков на T-SQL
Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML.
Falcon Space - платформа для создания сайтов с личными кабинетами
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Запрос расчета стоимости веб-проекта на базе Falcon Space
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта