2015-03-27 5 views
1

Нужна помощь в создании функции, которая возвращает TRUE или FALSE. TRUE - если тип 1 или 3 слова (например, '__hello_', '_hello', '_hello мой френд' - помещения должны быть сокращены), если условие не выполнено FALSEФункция проверки входного числа слов

CREATE FUNCTION dbo.nazvFac(@f nvarchar(30))  
RETURNS bit 
AS 
BEGIN 
DECLARE @l int = 1, @s nvarchar(30), @i int = 0, @b bit 
WHILE LTRIM(RTRIM(LEN(@f))) >= @l --error here, but I do not know how to fix it 
BEGIN         
    SET @s = SUBSTRING(@f, @l, 1) 
    IF @s BETWEEN 'А' AND 'я' 
     SET @l += 1 
    ELSE IF @s = ' ' 
    BEGIN 
     SET @l -= 1 
     SET @s = SUBSTRING(@f, @l, 1) 
     SET @s = RTRIM(@s) 
     SET @l += 2 
     SET @i += 1 
    END 
    ELSE 
     BREAK 
END 
IF @i = 0 OR @i = 2 
    SET @b = 'TRUE' 
ELSE 
    SET @b = 'FALSE' 
RETURN @b 
END 
GO 
+3

"* Джентльмены программисты *" => Есть программисты, которые тоже дамы, вы знаете! –

ответ

2

WHILE LTRIM(RTRIM(LEN(@f))) >= @l --error here, but I do not know how to fix it

LEN() возвращает int, который вы затем передаете строковой функции: RTRIM().

1

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

CREATE FUNCTION dbo.nazvFac(@f NVARCHAR(30))  
RETURNS BIT 
AS 
BEGIN 
    DECLARE @l INT = 1, @s NVARCHAR(30), @i INT = 0, @b BIT 

    WHILE LEN(LTRIM(RTRIM(@f))) >= @l --I think youn need to trim the string and then check length 
     BEGIN         
      SET @s = SUBSTRING(@f, @l, 1) 
      IF @s BETWEEN 'А' AND 'я' 
       SET @l += 1 
      ELSE IF @s = ' ' 
      BEGIN 
       SET @l -= 1 
       SET @s = SUBSTRING(@f, @l, 1) 
       SET @s = RTRIM(@s) 
       SET @l += 2 
       SET @i += 1 
      END 
      ELSE 
       BREAK 
     END 
    IF @i = 0 OR @i = 2 
     SET @b = 'TRUE' 
    ELSE 
     SET @b = 'FALSE' 
    RETURN @b 
END 
GO 
1

Вы хотите вернуть ИСТИННО только в том случае, если есть одно или три слова? Это должно сделать это:

CREATE FUNCTION dbo.nazvFac(@f NVARCHAR(30))  
RETURNS BIT 
AS 
BEGIN 
    DECLARE @l INT, @b BIT 

    SET @l = LEN(@f) - LEN(REPLACE(@f, ' ', '')) + 1 
    IF @l == 1 OR @l == 3 
     SET @b = 'TRUE' 
    ELSE 
     SET @b = 'FALSE' 

    RETURN @b 
END 

Также, JC. правильно о ошибке len().

Смежные вопросы