Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Anzela Member Откуда: Сообщений: 14 |
Помогите пожалуйста с задачкой, не понимаю, как ее построить.. Задание следующее:Необходимо создать функцию, которая будет вычислять дату рождения с личного кода. В базе данных таблицы нету с данными личности. Все нужно создать в функции. Личный код состоит из 11 чисел. например :38503252239- 85 это год рождения, 0325- 25.03 дата рождения. CREATE FUNCTION data_rozdenija(@isik CHAR(11)) RETURNS TABLE AS... как дальше... помогите, кто разбирается |
1 дек 13, 17:01 [15220698] Ответить | Цитировать Сообщить модератору |
Dmitry V. Liseev Member [заблокирован] Откуда: Санкт-Петербург Сообщений: 5489 |
А что за таблицу должна вернуть функция? |
1 дек 13, 17:20 [15220759] Ответить | Цитировать Сообщить модератору |
Dmitry V. Liseev Member [заблокирован] Откуда: Санкт-Петербург Сообщений: 5489 |
SUBSTRING не подойдёт? |
1 дек 13, 17:24 [15220767] Ответить | Цитировать Сообщить модератору |
Sekoka Member Откуда: Сообщений: 73 |
Anzela, Скорей всего тебе понадобится еще знать где в личном коде указывается столетие, если оно есть там вообще. Не думаю, что 85 год это тот самый год что был около 2000 лет назад. Ну да ладно. CREATE FUNCTION data_rozdenija(@isik CHAR(11)) RETURNS [b]date[/b] AS BEGIN DECLARE @date as date SET @date=convert(date,SUBSTRING (@isik ,6 , 2)+'.'+SUBSTRING (@isik ,4 , 2)+'.'+SUBSTRING (@isik ,2 , 2),4) RETURN @date END А так все просто в фунциях. Жирным выделил тип данных, непонятно как вывести тебе надо результат. Про SUBSTRING почитай в мануале. |
1 дек 13, 17:43 [15220822] Ответить | Цитировать Сообщить модератору |
Dmitry V. Liseev Member [заблокирован] Откуда: Санкт-Петербург Сообщений: 5489 |
Вроде бы RETURNS TABLE требовалось. |
1 дек 13, 17:46 [15220827] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
А так не проще?SELECT CONVERT(DATE,SUBSTRING('38503252239',2,6),12); |
1 дек 13, 17:47 [15220829] Ответить | Цитировать Сообщить модератору |
sdet Member Откуда: Сообщений: 463 |
Судя по названию темы для ТС что функции, что процедуры, что даты одинаково воспринимаются |
||
1 дек 13, 17:53 [15220849] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
Меня просто смутило в задании то, что функция строится без таблицы. Нашла в одном примере, что вывод происходит таким образом. Сама вбиваю в запросе код и по функции обрабатывает и выдает дату рождения SELECT * FROM data_rozdenija('38503252239') |
1 дек 13, 18:28 [15220951] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
RETURNS TABLE По поводу этого, я нашла пример, ну судя по всему там уже была таблица..значит мне тот вариант не подходил..)) |
1 дек 13, 18:31 [15220957] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
Sekoka, 85 это год рождения.. 1985 вывести должно таким образом 25.03.85 |
1 дек 13, 18:35 [15220973] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
http://msdn.microsoft.com/ru-ru/library/ms186755(v=sql.100).aspx ?? |
||
1 дек 13, 18:39 [15220978] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
городить серверные объекты базы данных. |
||||
1 дек 13, 18:40 [15220982] Ответить | Цитировать Сообщить модератору |
sdet Member Откуда: Сообщений: 463 |
А если будет 00 стоять, это какой год? |
||
1 дек 13, 18:58 [15221031] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
sdet, такого стоять не может) неправильно заданные значения |
1 дек 13, 19:03 [15221043] Ответить | Цитировать Сообщить модератору |
sdet Member Откуда: Сообщений: 463 |
Значит функция должна производить валидацию? И где эта функция будет использоваться? |
||
1 дек 13, 19:06 [15221057] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
Это просто функция, которая будет выводить дату рождения с личного кода человека. Для проверки работы функции личный код должны сами вводить |
1 дек 13, 19:21 [15221119] Ответить | Цитировать Сообщить модератору |
sdet Member Откуда: Сообщений: 463 |
Вы не ответили на вопросы функция должна производить валидацию? какой объект будет вызывать функцию? |
||
1 дек 13, 19:27 [15221151] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
насчет валидации это необязательно. В условии этого не было. Есть только цель вычислить дату рождения по личному коду А про объект я не поняла.. |
||
1 дек 13, 19:39 [15221212] Ответить | Цитировать Сообщить модератору |
sdet Member Откуда: Сообщений: 463 |
Вы же сказали, что в случае 00 должно быть выведено неправильно заданные значения Или функция должна вернуть 1900? Как вы будете вызывать эту функцию, через приложение или в SQL Server Management studio в виде учебного примера или лабораторной работы? |
||||
1 дек 13, 19:49 [15221250] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
sdet, CREATE FUNCTION data_rozdenija(@isik CHAR(11)) RETURNS datetime AS BEGIN DECLARE @date as datetime SET @date=convert(datetime,SUBSTRING (@isik ,6 , 2)+'.'+SUBSTRING (@isik ,4 , 2)+'.'+SUBSTRING (@isik ,2 , 2),4) RETURN @date END в Microsoft SQL Server Management буду проверять по функции вывод по личному коду.. Мне нужно тогда через SELECT написать правильный личный код в виде примера, чтоб выдал дату рождения) |
1 дек 13, 19:56 [15221273] Ответить | Цитировать Сообщить модератору |
Dmitry V. Liseev Member [заблокирован] Откуда: Санкт-Петербург Сообщений: 5489 |
Не обязателен SELECT. Можно через SET значение присвоить, вызвав функцию. Просто больше строчек кода писать. |
1 дек 13, 22:05 [15221719] Ответить | Цитировать Сообщить модератору |
Dmitry V. Liseev Member [заблокирован] Откуда: Санкт-Петербург Сообщений: 5489 |
Не юзайте datetime, юзайте date. |
1 дек 13, 22:10 [15221735] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
Dmitry V. Liseev, с date не работает |
1 дек 13, 23:25 [15221932] Ответить | Цитировать Сообщить модератору |
Dmitry V. Liseev Member [заблокирован] Откуда: Санкт-Петербург Сообщений: 5489 |
|
||
2 дек 13, 00:30 [15222205] Ответить | Цитировать Сообщить модератору |
Anzela Member Откуда: Сообщений: 14 |
Dmitry V. Liseev, Хорошо, спасибо..буду иметь ввиду |
2 дек 13, 00:46 [15222273] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |