Склонение фамилий в SQL Server
SqlMorpher.dll позволяет склонять фамилии, должности, названия городов и другие реквизиты
в SQL Server.
Вы можете создавать вычисляемые колонки со значением нужного падежа,
автоматически вставлять в поля падежные формы
или просто вызывать функции склонения со стороны клиента базы данных.
Совместимость
SqlMorpher.dll работает на следующих платформах:
- SQL Server 2005
- SQL Server 2008
- SQL Server 2012
- SQL Server 2014
- SQL Server 2016
- SQL Server 2017
Функции склонения
Самый простой сценарий использования модуля - это вызов функций склонения по падежам. Названия функций соответствуют названиям падежей русского языка:
SELECT dbo.Именительный (N'город Москва') -- город Москва
SELECT dbo.Родительный (N'город Москва') -- города Москвы
SELECT dbo.Дательный (N'город Москва') -- городу Москве
SELECT dbo.Винительный (N'город Москва') -- город Москву
SELECT dbo.Творительный (N'город Москва') -- городом Москвой
SELECT dbo.Предложный (N'город Москва') -- городе Москве
SELECT dbo.ПредложныйО (N'город Москва') -- о городе Москве
Также модуль предоставляет функции склонения исходной строки, отвечающие на вопросы:
SELECT dbo.Где (N'город Москва') -- в городе Москве
SELECT dbo.Куда (N'город Москва') -- в город Москву
SELECT dbo.Откуда (N'город Москва') -- из города Москвы
Все функции модуля принимают и возвращают строковые параметры как SQL тип данных nvarchar. Таким образом при задании строковых литералов необходимо указывать букву N перед открывающей строку кавычкой.
Функция Падеж
Функция Падеж является более общим и расширенным вариантом склонения.
CREATE FUNCTION dbo.Падеж (
@s nvarchar (max),
@падеж nvarchar (6),
@признаки nvarchar (7))
RETURNS nvarchar (max)
@s – строка для склонения,
@падеж – требуемая падежная форма:
- 'И' – именительный (без изменения)
- 'Р' – родительный (кого? чего?)
- 'Д' – дательный (кому? чему?)
- 'В' – винительный (кого? что?)
- 'Т' – творительный (кем? чем?)
- 'П' – предложный (о ком? о чем?) без предлога
- 'По' – предложный (о ком? о чем?) с предлогом О/ОБ/ОБО
- 'Где' – предложный с предлогом В/НА – отвечает на вопрос где?
- 'Куда' – винительный с предлогом В/НА – отвечает на вопрос куда?
- 'Откуда' – родительный с предлогом ИЗ/С – отвечает на вопрос откуда?
Рекомендации по выбору варианта предложного падежа
@признаки – набор признаков, разделенных пробелом или запятой:
- 'ФИО' – фамилия, имя или отчество
- 'Гео' – географическое название. Это признак устарел и оставлен для совместимости со старыми версиями модуля.
- 'Нар' – нарицательное
- 'Муж' – мужской род
- 'Жен' – женский род
- 'Одуш' – одушевленное
- 'Неод' – неодушевленное
@признаки нужны, когда в словосочетании (@s) недостаточно информации для однозначного склонения, например:
SELECT dbo.Падеж (N'Любовь', N'Д', N'ФИО') -- Любови
SELECT dbo.Падеж (N'Любовь', N'Д', N'нар') -- Любви
SELECT dbo.Падеж (N'Полищук', N'Д', N'муж') -- Полищуку
SELECT dbo.Падеж (N'Полищук', N'Д', N'жен') -- Полищук
В остальных случаях признаки указывать необязательно:
SELECT dbo.Падеж (N'Любовь Полищук', N'Д', null) -- Любови Полищук
SELECT dbo.Падеж (N'Дмитрий Полищук', N'Д', null) -- Дмитрию Полищуку
Функция ПолучитьФамилиюПротивоположногоПола
CREATE FUNCTION dbo.ПолучитьФамилиюПротивоположногоПола (
@фамилия nvarchar (max))
RETURNS nvarchar (max)
Данная функция строит фамилию женского рода для данной фамилии мужского рода и наоборот. Например:
SELECT dbo.ПолучитьФамилиюПротивоположногоПола (N'Пушкин') -- Пушкина
SELECT dbo.ПолучитьФамилиюПротивоположногоПола (N'Толстой') -- Толстая
SELECT dbo.ПолучитьФамилиюПротивоположногоПола (N'Лермонтов') -- Лермонтова
Для фамилий, не изменяющихся по родам, фамилия остается без изменений:
SELECT dbo.ПолучитьФамилиюПротивоположногоПола (N'Лещенко') -- Лещенко
SELECT dbo.ПолучитьФамилиюПротивоположногоПола (N'Заворотнюк') -- Заворотнюк
SELECT dbo.ПолучитьФамилиюПротивоположногоПола (N'Перельман') -- Перельман
Функция определения рода
SELECT dbo.ОпределитьРод (N'Евгений') -- Мужской
SELECT dbo.ОпределитьРод (N'Евгения') -- Женский
SELECT dbo.ОпределитьРод (N'окно') -- Средний
SELECT dbo.ОпределитьРод (N'часы') -- Множественное число
SELECT dbo.ОпределитьРод (N'Petrov') -- Ошибка
Функция Пропись: формирование суммы прописью
CREATE FUNCTION dbo.Пропись (@число int, @единицаИзмерения nvarchar (max));
RETURNS TABLE (ПрописьЧисла nvarchar (max), ЕдиницаИзмеренияВНужномПадеже nvarchar (max));
Инструкция по установке
Модуль склонения интегрируется в SQL Server при помощи технологии под названием
CLR Integration,
появившейся в SQL Server начиная с версии 2005.
Комплект поставки включает следующие скрипты:
- Install.sql — скрипт установки библиотеки;
- Uninstall.sql — скрипт удаления библиотеки, рекомендуется запускать перед переходом на новую версию;
- СуммаПрописью.sql — пример вывода суммы прописью с помощью функции модуля Пропись.
Для установки выполните следующие шаги:
- Распакуйте поставочный архив во временную папку, доступную службе SQL Server.
- Запустите
Microsoft SQL Server Management Studio.
- Подключитесь к нужной базе.
- В новом окне редактора (Ctrl-N) выполните команду:
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO
- Откройте файл Install.sql в редакторе и укажите в нем путь к SqlMorpher.dll:
CREATE ASSEMBLY SqlMorpher
FROM 'путь\SqlMorpher.dll'
WITH PERMISSION_SET = SAFE;
go
- Выполните Install.sql.
- Если при этом выдается сообщение об ошибке:
Неправильный синтаксис около "EXTERNAL". Возможно, следует установить более
высокий уровень совместимости для текущей базы данных, чтобы включить эту функцию.
См. справку по параметру SET COMPATIBILITY_LEVEL инструкции ALTER DATABASE.
То выполните команду:
sp_dbcmptlevel 'название_БД', 90
И запустите Install.sql еще раз.
- Ваш SQL Server к склонению готов! Проверяем:
SELECT dbo.Падеж (N'Петров Пётр', N'Р', null);
- Временную папку можно удалить.
Получение и установка обновлений
Чтобы получить новую версию библиотеки, напишите нам с электронного адреса,
на который зарегистрирована лицензия, либо укажите номер договора, название юрлица или контактного лица.
Процедура установки обновления:
- Выполните файл Uninstall.sql из старого дистрибутива.
- Следуйте инструкции по установке выше.
История изменений
Дата |
Версия |
|
03.11.2021 |
2.6.10 |
- Склонение имен Аслан-бек, Джалил-бек и подобных
- 266 новых слов из odict.ru
- Склонение топонима «Красный боец»
- Предлог «на» для сокращения «ул»: «на ул. Фрунзе», «на Тенистой ул.»
- Предлог «на» для слов перевал, застава и др.
- «Член правления», «доставка, демонтаж и монтаж»
|
26.04.2021 |
2.6.9 |
-
Добавлено 25 тысяч слов из русского Викисловаря.
-
Добавлено более 14600 новых слов
(новое издание словаря Зализняка
+ пополнение словаря odict.ru).
-
Добавлено 752 фамилии из Википедии.
-
Функция Пропись теперь считает единицы измерения нарицательными.
-
Улучшено склонение несловарных ФИО, а также фамилий с дефисом (Тер-Оганесян, Кул-Мухаммед)
-
Функция склонения больше не заменяет латинские буквы на русские.
-
Исправлено склонение Шугыла Нурсабикызы и подобных
(где -кызы пишется слитно).
-
Исправлено склонение нестандартной фамилии Василив.
-
Исправлено склонение нестандартного топонима Уторгош,
который склоняется и по мужскому, и по женскому типу:
Малая Уторгош и Малый Уторгош.
-
Орёл теперь склоняется как неодушевленное (название города).
-
Исправлено склонение Илон Маск, контакт-центр.
-
Исправлено склонение смартфон samsung galaxy j3 sm-j330f ds черный.
-
Исправлено склонение Смартфон Apple iPhone 11 Pro Max 256GB Midnight Green (MWHM2RU/A).
|
03.07.2020 |
2.6.6 |
- Исправлено склонение ряда женских имен Ближнего Востока:
Алмаз, Анушик, Алтнат и др.
- Исправлено склонение отдельных словосочетаний: Кива Владимир, Кабинет Министров, мешок.
- Теперь не склоняются слова в кавычках: Сторожевой корабль «Сметливый».
- Добавлено более 300 новых слов.
|
15.04.2019 |
2.6.5 |
Актуализирована кодовая база и произведено пополнение словаря. Исправлена процедура установки. Исправлен ряд отдельных ошибок: пропись слова год в винительном падеже при n=1, склонение словосочетаний и сокращений, склонение узбекской денежной единицы тийин, склонение словосочетаний вида город Москва. Корректно обрабатываются наречия: отдельно ("отдельно стоящее здание"), слегка, почти, совершенно.
|
22.04.2015 |
2.6.4 |
Исправлена ошибка, возникавшая в MSSQL 2005 при регистрации сборки
(
CREATE ASSEMBLY failed because method 'get_DecoratedLemma' on type 'Slepov.Russian.Morpher.MultiPartDecoratedWord' in safe assembly 'SqlMorpher' is storing to a static field. Storing to a static field is not allowed in safe assemblies.
).
В MSSQL 2008 ошибка не возникала.
|
15.04.2015 |
2.6.3 |
Пополнение словаря.
|
15.03.2015 |
2.6.2 |
Исправлено склонение сокращения "И.о." (исполняющий обязанности), когда первая буква заглавная, например "И.о. директора".
|
1.10.2014 |
2.6.1 |
- Существенное пополнение словаря (более 7000 новых слов).
- Сокращения зам. и зав. теперь не склоняются.
- Функции теперь возвращают NULL, а не ошибку, если любой из обязательных параметров равен NULL.
|
17.08.2014 |
2.6.0 |
Исправлена ошибка в прописи чисел вида ... x1y abc, где x=1..9, y=1..4, abc - любые 3 цифры, а ... - любая последовательность цифр, в т.ч. нулевой длины.
Пример числа: 311 000. Ошибка проявлялась только в родительном падеже (трёхсот одиннадцати ТЫСЯЧИ вместо трёхсот одиннадцати ТЫСЯЧ).
|
21.07.2014 |
2.5.0 |
Устранена проблема, возникавшая при регистрации сборки в SQL Server 2005
(CREATE ASSEMBLY failed because type 'Slepov.Russian.Morpher.Склонятель' in safe assembly 'SqlMorpher' has a static field 'CS$<>9__CachedAnonymousMethodDelegate12'. Attributes of static fields in safe assemblies must be marked readonly in Visual C#, ReadOnly in Visual Basic, or initonly in Visual C++ and intermediate language. ).
Проблема решена добавлением атрибута CompilerGeneratedAttribute к классу Склонятель .
В SQL Server 2008 сборка предыдущей версии работала нормально.
Работоспособность сборки проверена в SQL Server 2005 SP4 и SQL Server 2008 R2.
|
17.07.2014 |
2.4.1 |
Устранена проблема, возникавшая при регистрации сборки в SQL Server 2005
(CREATE ASSEMBLY failed because method 'Проанализировать' on type 'Slepov.Russian.Morpher.СклонятельНарицательных' in safe assembly 'SqlMorpher' is storing to a static field. Storing to a static field is not allowed in safe assemblies. ).
Проблема решена добавлением атрибута CompilerGeneratedAttribute к классу СклонятельНарицательных .
В SQL Server 2008 сборка предыдущей версии работала нормально.
|
12.07.2014 |
2.4.0 |
Добавлена поддержка SQL Server 2005.
Ранее поддерживались только SQL Server 2008 и выше.
Сборка теперь использует .NET 2.0 (раньше был .NET 3.5).
|
07.05.2014 |
2.3.1 |
Пополнение словаря.
|
18.02.2014 |
2.3.0 |
Улучшено распознавание ФИО для составных имен. Теперь входное словосочетание признается ФИО, если
хотя бы один из разделенных дефисом компонентов известен как имя. В результате стали правильно склоняться
такие имена как ГЕЙ-ЛЮССАК Жозеф-Луи, Кени Шарль-Андре, Гильермо Гомес-Пенья и другие.
|
23.09.2013 |
2.2.5 |
Исправлена ошибка в прописи числа 0,2 в винительном падеже. Эта ошибка касалась только чисел 0,2, 0,002, 0,000002 и т.д. и проявлялась только в винительном падеже ("двух десятых" вместо "две десятых"). |
22.08.2013 |
2.2.4 |
Добавлена функция ОпределитьРод. |
25.07.2013 |
2.2.3 |
Учтены последние изменения в Morpher.dll для .NET |
|
2.2.2 |
Исправлена ошибка 'CREATE ASSEMBLY failed because method is storing to a static field.' |
30.09.2012 |
2.2.1 |
Учет аббревиатуры "и.о." (исполняющий обязанности), небольшое пополнение словаря. |
|
2.2.0 |
Добавлена функция Пропись. |
|
2.1.0 |
Добавлена функция ПолучитьФамилиюПротивоположногоПола. |
|
2.0.2 |
Исправлен баг с Полищук (жен). |