morpher.ru +7 (925) 336 9960
nowhere@morpher.ru
 
 
Мой Морфер

Склонение фамилий в 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.
  • Запустите среду управления SQL Server, например, бесплатную среду Microsoft SQL Server 2008 Management Studio Express (2005).
  • Откройте файл 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 еще раз.
    • Если вы получили сообщение Configuration option 'clr enabled' changed from 0 to 1. Run the RECONFIGURE statement to install, то перезапустите службу SQL Server и выполните Install.sql заново.
  • Ваш SQL Server к склонению готов! Проверяем:
    SELECT dbo.Падеж (N'Петров Пётр',N'Р', null)
  • Временную папку можно удалить.

Получение и установка обновлений

Чтобы получить новую версию библиотеки, напишите нам с электронного адреса, на который зарегистрирована лицензия, либо укажите номер договора, название юрлица или контактного лица.

Процедура установки обновления:

  • Выполните файл Uninstall.sql из старого дистрибутива.
  • Следуйте инструкции по установке выше.

История изменений

Дата Версия  
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 Исправлен баг с Полищук (жен).


 

Библиотеки

Заметили опечатку? Выделите слово мышкой и нажмите Ctrl-Enter. Система Orphus

© Сергей Слепов, 2003 - 2019. Перепечатка материалов сайта только с разрешения автора.