【问题标题】:Function to check if a string contains uppercase characters?检查字符串是否包含大写字符的函数?
【发布时间】:2016-11-11 23:16:43
【问题描述】:

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

结束

【问题讨论】:

  • 向我们展示您目前的努力!你被困在哪里了?您面临的问题是什么?
  • @Temp 是什么?它没有在任何地方定义 - 既不是作为参数,也不是作为局部变量......
  • 预期的返回值应该分配给@temp

标签: sql-server-2014 sql-function


【解决方案1】:

这个怎么样?我只是简单地将@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

【讨论】:

  • 完美运行。非常感谢你
【解决方案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
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多