Оператор SQL CASE

Возможно ли следующее в SQL Server 2000?

CREATE FUNCTION getItemType  (@code varchar(18))
RETURNS int
AS
BEGIN
Declare @Type tinyint
Select @Type = case len(@code)
WHEN 12,14,17 THEN 1
WHEN 13,15,18 THEN 2
WHEN 8,10 THEN 3
ELSE  0
END
RETURN (@Type)
END

Спасибо.

11.12.2008 00:21:39
Что случилось, когда вы запустили это в SQL Server 2000?
DOK 11.12.2008 00:24:39
3 ОТВЕТА
РЕШЕНИЕ

попробуй это:

Select @Type = 
(select case 
WHEN len(@code) IN (12,14,17) THEN 1
WHEN len(@code) IN (13,15,18) THEN 2
WHEN len(@code) IN (8,10) THEN 3
ELSE  0
END)
4
11.12.2008 00:28:46
Спасибо друг! Я делал это давным-давно, но не мог вспомнить ... тоже не смог найти на MSDN и BOL.
Saif Khan 11.12.2008 00:36:16
взгляните на решение Дэйва Маркла ниже - он использует тот же синтаксис регистра, но ужесточил синтаксис самой функции
keithwarren7 11.12.2008 00:39:00
 try  
  SELECT CASE
           WHEN LEN(@gcode) IN(x, y, z) THEN a  
         END
 etc.

или вам может понадобиться

SELECT CASE LEN(@gcode)  
         WHEN x THEN a  
         WHEN y THEN a  
       END

и т.п.

Вот ссылка.

0
20.05.2011 05:41:19

Это должно сделать это:

CREATE FUNCTION getItemType(@code VARCHAR(18))
RETURNS INT
AS
BEGIN
    RETURN CASE 
        WHEN LEN(@code) IN (12,14,17) THEN 1
        WHEN LEN(@code) IN (13,15,18) THEN 2
        WHEN LEN(@code) IN (8,100)    THEN 3
        ELSE  0
    END
END
6
11.12.2008 00:31:53