【问题标题】:How to identify lowercase and special symbols in a string? [duplicate]如何识别字符串中的小写和特殊符号? [复制]
【发布时间】:2011-06-24 14:30:33
【问题描述】:

可能重复:
Using regular expression within a stored procedure

我需要验证一个不应包含小写字母和特殊符号的字符串。我使用了以下查询,使用它我能够找到特殊符号并且无法找到小写字母。请建议最好的方法。

DECLARE @InvNum VARCHAR(256);

SET  @InvNum='abcACB123'

IF (@InvNum LIKE '%[^A-Z0-9]%')
  BEGIN
    Print 'Enter valid Invoice #, Special characters and Lowercase Letters are not allowed'
  END
ELSE
  BEGIN
    Print 'Validation Success'
  END

【问题讨论】:

  • 字符串验证通常最好在您的应用层完成。
  • 您可以简单地将字符串转换为所有大写字母,而不是尝试检测小写字母

标签: sql-server sql-server-2005


【解决方案1】:

HalfTrackMindMan 几乎是正确的(对于示例数据也是如此),但不幸的是,字符范围总是扩展到包含小写字母(因此 bcABC123 会通过他的验证):

DECLARE @InvNum VARCHAR(256);

SET  @InvNum='abcACB123'

IF (@InvNum COLLATE Latin1_General_CS_AS LIKE '%[^ABCDEFGHIJKLMNOPQRSTUVWXYZ0-9]%')
  BEGIN
    Print 'Enter valid Invoice #, Special characters and Lowecase Letters are not allowed'
  END
ELSE
  BEGIN
    Print 'Validation Success'
  END

[A-Z] 扩展为AbBcCdDeEf...zZ

使用哪种排序规则取决于偏好 - 二进制排序规则或区分大小写 (_CS) 和区分重音 (_AS) 的排序规则都适合。

【讨论】:

  • +1,正要添加相同的东西:)
  • 感谢脚本,@HalfTrackMindMan 的脚本通过了字符串 bcABC123 的验证。它会影响我的查询性能吗?
【解决方案2】:
IF (@InvNum COLLATE Latin1_General_CS_AS LIKE '%[^A-Z0-9]%')

【讨论】:

  • 我个人会使用Latin1_General_Bin,但我认为这是要走的路。
  • 它对我有用,谢谢@HalfTrackMindMan 请建议它是否会影响我的查询性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2012-10-30
  • 1970-01-01
  • 2021-03-31
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多