2010-08-19 7 views

답변

2

항상 두 번째가있을거야 가정, 그리고 어떤 세 번째는,이 작동한다고 ...

CREATE FUNCTION dbo.fn_Bob(@str VARCHAR(20)) RETURNS BIT 
BEGIN 
    RETURN CASE WHEN @str LIKE '%;' THEN 0 ELSE 1 END 
END 
+1

가가의 없을 겁니다 '%; %;' ? – SteveCav

+0

+1 분명히 훨씬 더 깨끗하고 내 가정을 없앨 것입니다! –

0

CHARINDEX가 시작 위치를 선택할 수있는 선택적 매개 변수를 가지고, 그래서 첫 번째 발견 ";"의 색인 다음 문자에서 시작하여 1을 추가하고 다음 색인을 확인하십시오. 길이는 더 길어야합니다.

DECLARE @stringToTest nvarchar(100) 
SET @stringToTest = '2:00AM;3:00PM;'; 
IF(LEN(@stringToTest) > CHARINDEX(';', @stringToTest, CHARINDEX(';', @stringToTest) + 1)) 
BEGIN 
    PRINT 'Yes' 
END 
ELSE 
BEGIN 
    PRINT 'No' 
END 
0
create function [dbo].[udf_IsValidCheck](@Value varchar(64)) returns bit 
as 
begin 
    declare @IsValidCheck bit 
    select @IsValidCheck = (case when charindex(';', @Value, charindex(';', @Value) + 1) > 0 
              and charindex(';', @Value, charindex(';', @Value) + 1) < len(@Value) then 1 
            else 0 end) 
    return @IsValidCheck 
end 

테스트 데이터 :

'2:00AM;3:00PM;' --returns 0 

'2:00AM;3:00PM' --returns 0 

'2:00AM;3:00PM;3rdValue;4thValue;' --returns 1 

'2:00AM;3:00PM;3rdValue;' --returns 1 

'2:00AM;3:00PM;3rdValue' --returns 1 

'2:00AM;' -- returns 0 

'2:00AM;' -- returns 0 
관련 문제