检查字符串是否包含大写字符的函数?

时间:2016-07-09 14:12:44

标签: sql-server-2014 sql-function

我需要创建一个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

2 个答案:

答案 0 :(得分:2)

如果您想知道该字符串是否包含至少一个大写字符,为什么不对该字符串的小写字母版本进行区分大小写的比较?

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
;

答案 1 :(得分: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