2016-07-09 6 views
-1

Мне нужно создать функцию SQL Server, чтобы проверить, содержит ли строка ввода любые символы в верхнем регистре. Если да, то он должен вернуть «ОК». Если нет, он должен вернуть «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

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