Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Склонение  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите кто нибудь склонял когда нибудь в sql? Говорят что это не просто сделать.

Выводится "Петров Иван Иванович"

А нужно "Петрова Ивана Ивановича"
5 июл 16, 19:37    [19372555]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
_human
Member

Откуда:
Сообщений: 569
Pabl0,

На ум приходит прикрутить словарь содержащий уже все возможные склонения или как-то грамматику написать на t-sql:)
5 июл 16, 19:47    [19372575]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Этот совет мне уже посоветовали, но это будет очень громоздко и в обнимку со словарем.
5 июл 16, 20:20    [19372647]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
_human
Member

Откуда:
Сообщений: 569
понимаю, но лучше найти словарь. Возможно существенно секономит время во всех слыслах).
Если найти не получиться, тогда все имена(select distinct name), фамилии склоняем во всех падежах и ложим в словарь).
По склонениям поможет [url=http://new.gramota.ru/spravka/letters/71-rubric-482 ]http://new.gramota.ru/spravka/letters/71-rubric-482 [/url] и т.п.
5 июл 16, 20:38    [19372684]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
http://morpher.ru/Products/DLL/SQLServer.aspx
5 июл 16, 20:59    [19372751]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Pabl0
Member

Откуда:
Сообщений: 265
invm, а подскажите как установить эту библиотеку? SqlMorpher.dll
5 июл 16, 21:21    [19372821]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Pabl0
Member

Откуда:
Сообщений: 265
_human, там слишком большой обьем, что бы так делать
5 июл 16, 21:21    [19372824]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Pabl0
invm, а подскажите как установить эту библиотеку? SqlMorpher.dll
Прочитать статью полностью сил не хватило?

ЗЫ: Прежде чем устанавливать, эту библиотеку нужно купить...
5 июл 16, 21:45    [19372894]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
982183
Member

Откуда: VL
Сообщений: 3386
У нас сразу вводят в базу в двух видах.
6 июл 16, 02:30    [19373421]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
o-o
Guest
982183
У нас сразу вводят в базу в двух видах.

В иминительном и винительном падежах
6 июл 16, 07:06    [19373499]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
aleks2
Guest
Pabl0
Подскажите кто нибудь склонял когда нибудь в sql? Говорят что это не просто сделать.

Выводится "Петров Иван Иванович"

А нужно "Петрова Ивана Ивановича"


Вариантов три.
1. Подучит русский язык и, таки, запилить преобразование в винительный падеж. Иностранцы и прочие хохлы вам сильно попортят нервы.
2. Модифицировать тексты документов, так, что там использовался только именительный падеж.
3. Запилить словарь. Пополнять автоматом, а винительный падеж вводить ручками.
6 июл 16, 07:59    [19373540]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
o-o
Guest
aleks2
2. Модифицировать тексты документов, так, что там использовался только именительный падеж.

Вариант 2.1(глобализированный)
Перевести все и всех на инглиш, там максимум possessive case
6 июл 16, 08:39    [19373602]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
Pabl0,

встроенный парсер полнотестового поиска может дать морфологические формы слова:

SELECT * FROM sys.dm_fts_parser(N'FORMSOF(INFLECTIONAL, "Петров Иван Иванович")', 1049, NULL, 1)


подойдёт ли это вам для вашей задачи.
6 июл 16, 14:18    [19375451]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Denis Reznik, у меня ms sql 2005 и выдает ошибку "Invalid object name 'sys.dm_fts_parser'."
7 июл 16, 13:05    [19380377]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Не нужно полагаться на какие-то кривые сторонние решения.
Сделайте словарь и постепенно (запросами, вручную) его наполняйте. нужно сделать удобный ГУЙ для ручных правок. Посадить девочку "или толкового майора". :) Пусть правят.
Других вариантов не будет.

зы: 90% работы можно сделать уже в первый день. Правда на остальные 10% могут уйти недели.
8 июл 16, 10:42    [19384575]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Когда 18 тыщ. человек как то не просто это все :)
8 июл 16, 11:11    [19384736]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4182
aleks2
Pabl0
Подскажите кто нибудь склонял когда нибудь в sql? Говорят что это не просто сделать.

Выводится "Петров Иван Иванович"

А нужно "Петрова Ивана Ивановича"


Вариантов три.
1. Подучит русский язык и, таки, запилить преобразование в винительный падеж. Иностранцы и прочие хохлы вам сильно попортят нервы.
2. Модифицировать тексты документов, так, что там использовался только именительный падеж.
3. Запилить словарь. Пополнять автоматом, а винительный падеж вводить ручками.


Юзер, ты что себе позволяешь?
8 июл 16, 12:02    [19385176]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Ролг Хупин
Юзер, ты что себе позволяешь?

ему можно ,он как раз относиться к прочим
8 июл 16, 12:35    [19385422]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4182
Maxx
Ролг Хупин
Юзер, ты что себе позволяешь?

ему можно ,он как раз относиться к прочим


в таком случае - вопросов больше не имею (ц)
хотя это и не оправдывает такие экспрессии.
8 июл 16, 13:04    [19385624]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Ролг Хупин,

да ну расслабтесь вы дядя Саша говорил усключительно про попынку просклонять че нить ти па Хо Ше Мин и етц
8 июл 16, 13:18    [19385711]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
o-o
Guest
Хоше Мин, хоше Махх
8 июл 16, 13:23    [19385754]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
:)
8 июл 16, 13:34    [19385828]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
VAlexey
Member

Откуда:
Сообщений: 130
Давно когда-то написанная функция. Набор правил не полный. Периодически приходится дополнять.
Даю на условиях "AS IS"

+

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Declination](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[B_Surname] [bit] NOT NULL CONSTRAINT [DF_Declination_B_Surname]  DEFAULT ((0)),
	[C_End] [varchar](5) NOT NULL,
	[B_Letter] [bit] NULL CONSTRAINT [DF_Declination_B_Letter]  DEFAULT ((0)),
	[B_Gender] [bit] NULL CONSTRAINT [DF_Declination_B_Gender]  DEFAULT ((0)),
	[C_EndRod] [varchar](5) NULL,
	[C_EndDat] [varchar](5) NULL,
	[C_EndVin] [varchar](5) NULL,
	[C_EndTvo] [varchar](5) NULL,
	[C_EndPre] [varchar](5) NULL,
 CONSTRAINT [PK_CS_Declination] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 

GO
SET ANSI_PADDING ON
GO
SET IDENTITY_INSERT [dbo].[Declination] ON 

GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (36, 0, N'', 1, 1, N'а', N'у', N'а', N'ом', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (37, 0, N'а', NULL, 0, N'ы', N'е', N'у', N'ой', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (38, 0, N'а', NULL, 1, N'ы', N'е', N'у', N'ой', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (39, 0, N'е', NULL, 1, N'я', N'ю', N'я', N'ем', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (40, 0, N'й', NULL, 1, N'я', N'ю', N'я', N'ем', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (41, 0, N'о', 1, 1, N'а', N'у', N'о', N'а', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (42, 0, N'ь', 1, 1, N'я', N'ю', N'я', N'ем', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (43, 0, N'я', NULL, 0, N'и', N'е', N'ю', N'ей', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (44, 0, N'я', NULL, 1, N'и', N'е', N'ю', N'ей', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (45, 1, N'ов', 1, 1, N'ова', N'ову', N'ова', N'овым', N'ове')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (46, 1, N'ова', 1, 0, N'овой', N'овой', N'ову', N'овой', N'овой')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (47, 1, N'', 1, 1, N'а', N'у', N'а', N'ым', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (48, 1, N'а', 1, 1, N'ы', N'е', N'у', N'ой', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (49, 1, N'ский', 1, 1, N'ского', N'скому', N'ского', N'ским', N'ском')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (50, 1, N'ская', 1, 0, N'ской', N'ской', N'скую', N'ской', N'ской')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (51, 1, N'ой', 1, 1, N'ого', N'ому', N'ого', N'овым', N'ом')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (52, 1, N'их', 1, NULL, N'их', N'их', N'их', N'их', N'их')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (53, 1, N'ых', 1, NULL, N'ых', N'ых', N'ых', N'ых', N'ых')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (54, 1, N'с', NULL, NULL, N'с', N'с', N'с', N'с', N'с')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (55, 1, N'е', NULL, NULL, N'е', N'е', N'е', N'е', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (56, 1, N'э', NULL, NULL, N'э', N'э', N'э', N'э', N'э')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (57, 1, N'и', NULL, NULL, N'и', N'и', N'и', N'и', N'и')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (58, 1, N'ы', NULL, NULL, N'ы', N'ы', N'ы', N'ы', N'ы')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (59, 1, N'у', NULL, NULL, N'у', N'у', N'у', N'у', N'у')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (60, 1, N'ю', NULL, NULL, N'ю', N'ю', N'ю', N'ю', N'ю')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (61, 1, N'о', NULL, NULL, N'о', N'о', N'о', N'о', N'о')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (62, 1, N'а', 0, 0, N'а', N'а', N'а', N'а', N'а')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (63, 1, N'я', NULL, NULL, N'и', N'е', N'ю', N'ей', N'и')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (64, 0, N'ич', 1, 1, N'ича', N'ичу', N'ича', N'ичем', N'иче')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (65, 1, N'а', 1, 0, N'ой', N'ой', N'у', N'ой', N'ой')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (66, 0, N'ь', 1, 0, N'и', N'и', N'и', N'и', N'и')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (67, 0, N'', 1, 0, N'', N'', N'', N'', N'')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (68, 1, N'ь', 1, 1, N'я', N'ю', N'я', N'ем', N'е')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (69, 0, N'ка', 0, 0, N'ки', N'ке', N'ку', N'кой', N'ке')
GO
INSERT [dbo].[Declination] ([ID], [B_Surname], [C_End], [B_Letter], [B_Gender], [C_EndRod], [C_EndDat], [C_EndVin], [C_EndTvo], [C_EndPre]) VALUES (70, 0, N'га', NULL, 0, N'ги', N'ге', N'гу', N'гой', N'ге')
GO
SET IDENTITY_INSERT dbo.[Declination] OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Идентификатор' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Фамилия (1 - фамилия; 0 - не фамилия)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'B_Surname'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Окончание слова' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'C_End'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Тип посл. буквы (1 - согласная; 0 - гласная)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'B_Letter'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Род (мужской - 1; женский - 0)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'B_Gender'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Окончание в родительском падеже' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'C_EndRod'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Окончание в дательном падеже' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'C_EndDat'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Окончание в винительном падеже' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'C_EndVin'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Окончание в творительном падеже' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'C_EndTvo'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Окончание в предложном падеже' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Declination', @level2type=N'COLUMN',@level2name=N'C_EndPre'
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description:		Склонение ФИО по падежам
-- =============================================
CREATE FUNCTION dbo.[Get_Declination] -- Склонение
(
	@IsSurname bit, -- Входное слово фамилия?
	@Str varchar(250), -- Входная строка
	@Gender bit, -- Пол (1 - Мужской; 0 - Женский)
	@Case tinyint  -- Падеж (0 - Им; 1 - Род, 2 - Дат, 3 - Вин, 4 - Тв, 5 - Пр.)
) 
RETURNS varchar(250)
AS  
BEGIN 

declare @Result varchar(250)

IF UPPER(@Str) = @Str COLLATE Cyrillic_General_CS_AS
	RETURN @Str;

SET @Result = (
SELECT TOP 1 C_Result = substring(@Str,1,len(@Str)-LEN(C_End)) +
	ISNULL(CASE @Case  WHEN 1 THEN C_EndRod WHEN 2 THEN C_EndDat WHEN 3 THEN C_EndVin WHEN 4 THEN C_EndTvo ELSE C_EndPre END,'')
FROM
	dbo.Declination Declination
WHERE
	(B_Surname IS NULL OR B_Surname = @IsSurname)
		AND
	(C_End = '' OR @Str like '%'+ C_End)
		AND
	(B_Letter IS NULL OR @Str like '%' + CASE WHEN B_Letter=1 THEN '[^уеъьйыаоэяиюё]' ELSE '[уеъьйыаоэяиюё]' END + REPLICATE('_', LEN(C_End)) )
		AND
	(B_Gender IS NULL OR B_Gender = @Gender)
ORDER BY Declination.B_Surname DESC, LEN(Declination.C_End) DESC, B_Letter Desc, B_Gender DESC 
)

RETURN ISNULL(@result, @str);
END
GO



SELECT Fam, Im, Otch, Gender, P.N,
	dbo.Get_Declination(1, Fam, Gender, P.C),
	dbo.Get_Declination(0, Im, Gender, P.C),
	dbo.Get_Declination(0, Otch, Gender, P.C)
FROM
(
	SELECT 'Петров' Fam, 'Иван' Im, 'Иванович' Otch, 1 Gender
	UNION ALL SELECT 'Сергеева' Fam, 'Ольга' Im, 'Алексеевна' Otch, 0 Gender
	UNION ALL SELECT 'Харитонов' Fam, 'Юрий' Im, 'Владимирович' Otch, 1 Gender
) T
CROSS APPLY 
( SELECT 1 C, 'род' N UNION SELECT 2, 'дат' UNION SELECT 3, 'вин' UNION SELECT 4, 'тв' UNION SELECT 5, 'пр') P
ORDER BY  Fam, Im, Otch, Gender, P.C

GO



drop table [dbo].[Declination]
drop function dbo.[Get_Declination] 
GO

8 июл 16, 18:40    [19387789]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Pabl0
Подскажите кто нибудь склонял когда нибудь в sql? Говорят что это не просто сделать.

Выводится "Петров Иван Иванович"

А нужно "Петрова Ивана Ивановича"


Без знаний пола субъекта правильно склонять невозможно.
8 июл 16, 22:15    [19388474]     Ответить | Цитировать Сообщить модератору
 Re: Склонение  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4182
Maxx
Ролг Хупин,

да ну расслабтесь вы дядя Саша говорил усключительно про попынку просклонять че нить ти па Хо Ше Мин и етц


Хо Ше Минетц
9 июл 16, 09:18    [19389195]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить