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