2016-07-09 5 views
-1

입력 문자열에 대문자가 포함되어 있는지 확인하려면 SQL Server 함수를 만들어야합니다. 그렇다면 "OK"를 반환해야합니다. 그렇지 않으면 "NOT OKAY"를 ​​반환해야합니다.문자열에 대문자가 포함되어 있는지 확인하는 기능?

아래 명령문을 실행하면 다음과 같이 예상 값이 반환됩니다.

PRINT dbo.CheckStringOfUpperAlphaOK('abc') -- Expected: "NOT OK" 
PRINT dbo.CheckStringOfUpperAlphaOK('ABC') -- Expected: "OK" 

이것은 내가 시도한 것이지만 위에 언급 한 바와 같이 반환 값을 지정하는 것은 알 수 없습니다.

CREATE FUNCTION CheckStringOfUpperAlphaOK (@String varchar(MAX)) 
RETURNS VARCHAR(6) 
AS 
BEGIN 
Declare @KeepValues as varchar(50) 
Set @KeepValues = '%[^ ][A-Z]%' 

While PatIndex(@KeepValues collate Latin1_General_Bin, @Temp) > 0 
    Set @Temp = Stuff(@Temp, PatIndex(@KeepValues collate 
    Latin1_General_Bin, @Temp) + 1, 0, ' ') 

RETURN @Temp 

END

+1

우리에게 현재의 노력을보기를! 어디서 붙어 있니? 당신이 겪고있는 문제는 무엇입니까? –

+0

'@ Temp'이란 무엇입니까 ?? 매개 변수로도 로컬 변수로도 정의되지 않습니다 ... –

+0

예상되는 반환 값은 @temp에 할당되어야합니다 – Ayyub

답변

2

당신이 문자열이 적어도 하나의 대문자 문자가 포함 된 경우 알고 싶다면, 왜 문자열의 하위 caser 버전 대소 문자를 구분하는 비교를하지?

CREATE FUNCTION CheckStringOfUpperAlphaOK 
(
    @STR VARCHAR(MAX) 
) 
RETURNS VARCHAR(6) 
AS 
BEGIN 
    RETURN CASE 
      WHEN @STR = LOWER(@STR) COLLATE Latin1_General_Bin THEN 'NOT OK' 
      ELSE 'OK' 
      END 
END 
; 
2

어때? 난 그냥 단순히 대문자를 확인하는 (간체) 패턴에 @String 매개 변수를 비교 - 그리고 그 인덱스를 기반으로, 나는 반환 값을 정의하고 적절한 응답 반환 :

CREATE FUNCTION CheckStringOfUpperAlphaOK(@String varchar(MAX)) 
RETURNS VARCHAR(6) 
AS 
BEGIN 
    DECLARE @UpperCasePos BIGINT 

    SELECT @UpperCasePos = PATINDEX('%[A-Z]%' collate Latin1_General_Bin, @String) 

    DECLARE @Response VARCHAR(6) 

    IF @UpperCasePos > 0 
     SET @Response = 'OK' 
    ELSE 
     SET @Response = 'NOT OK' 

    RETURN @Response 
END 
+1

완벽하게 작동합니다. 대단히 감사합니다. – Ayyub