Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

Использование CASE в функции (ошибка синтаксиса)

20.11.2012, 18:34. Показов 1879. Ответов 5
Метки нет (Все метки)

Мне нужно написать функцию которая будет считать для студентов номер курса основываясь на строке с названием группы. Получается она должна делать:
1)Проверить текущий месяц даты и в зависимости от этого числа рассчитать номер курса
2)Проверить наличие буковки м/c в строке что обозначает что это магистратура
И для первого и для второго мне нужно сделать проверку условий по типу if/else, как просто вот так взять и сделать проверку в t-sql чтобы при этом всё было синтаксически правильно? Никакие выборки мне делать в даном случае не нужно, а вот CASE WHERE у меня почему-то получается сделать только при выборке из таблицы, как же его сделать без таблиц?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE FUNCTION dbo.numOfCourse (@dat varchar(10))
RETURNS int
BEGIN
    DECLARE
        @number tinyint,
        @now date = GETDATE()
 
    CASE -- говорит нельзя вот так просто взять и сделать case где мне этого захотелось
        WHEN(DATEPART(month,date)<10) THEN SET @number=1
        ELSE SET @number=2
    END
 
    RETURN number
END
GO
Добавлено через 1 час 4 минуты
Окей разобрался что то что возвращает CASE нужно всегда присваивать, а в самом CASE делать присваивания переменным нельзя. Хотя мне непонятно почему нельзя сделать CASE и не использовать его значение ...

Добавлено через 38 минут
Написал свою функцию, но в ней много слишком WHERE, так возможно ли присваивание значения переменной между CASE - END скобками?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2012, 18:34
Ответы с готовыми решениями:

Ошибка синтаксиса функции
Здравствуйте, при компиляции программы выдаётся ошибка (о том что функция не определена, стр 102)....

Ошибка при вводе функции case
&lt;?php /*Корзина*/ session_start(); if(!isset($_SESSION)) // название страницы для сессии {...

Ошибка CASE в CASE возникла при переносе в столбец с текстом, дату
Подскажите пожалуйста, при формировании второго условия возникла ошибка, как исправить? - как...

Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr
NET Framework. Программа для поиска простых чисел среди чисел Фибоначчи. При нахождении...

5
1035 / 812 / 318
Регистрация: 02.09.2012
Сообщений: 2,479
21.11.2012, 23:46 2
SET и CASE все наоборот. Должно сработать такое:

T-SQL
1
2
3
4
5
SET @number =
  CASE -- говорит нельзя вот так просто взять и сделать case где мне этого захотелось
        WHEN(DATEPART(month,date)<10) THEN 1
        ELSE 2
  END
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
21.11.2012, 23:48  [ТС] 3
grgdvo, да с этим я уже разобарался, писал уже. Меня интересует можно ли SET'ить значения в ветках, что-то типа when (true) SET @a = 2 THEN 1, те вернуть 1 как результат CASE, но перед тем как верунть 1 изменить ещё и значение какой-то переменной.
0
91 / 56 / 12
Регистрация: 02.10.2008
Сообщений: 550
22.11.2012, 23:21 4
А если SET убрать

SQL
1
THEN @NUMBER = 1 ELSE @NUMBER = 2
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
22.11.2012, 23:54  [ТС] 5
Claster, нет, так не даёт. Я же почему изначально тему и создал, я просто хотел себе в with ветке писать что чему присваивать, но это мне sql server 2012 не позволил.
0
1035 / 812 / 318
Регистрация: 02.09.2012
Сообщений: 2,479
23.11.2012, 20:35 6
в синтаксисе tsql после then написано result_expression.
не уверен, но то, что вы хотите, по-моему невозможно.
тогда уж проще перейти к IF'ам: будет объемно, но реализуемо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2012, 20:35

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Нюансы синтаксиса: использование using
Всем доброе утро, вообщем хотел спросить давно уже, а что делает using, помимо вот такого его...

Нюансы синтаксиса: использование typedef
typedef int(*compare_func)(void* left, void* right); В первых круглых скобках - &quot;*compare_func&quot;...

Оператор case (ошибка): "Control cannot fall through from one case Label ('default:') to another"
Выдает ошибку: &quot;Control cannot fall through from one case label ('default:') to another&quot; class...

Использование CASE?
Доброго времени суток. Вопрос. Есть селект из которого нужно получить данные CASE`ом или любым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.