【问题标题】:How to match diacritics with regex within TSQL如何在 SQL 中将变音符号与正则表达式匹配
【发布时间】:2016-06-09 14:04:23
【问题描述】:

正则表达式应该只允许从 a 到 z、空格和破折号 (-) 的字符。

下面的示例脚本有什么问题?

DECLARE @firstNameRegex VARCHAR(100)='%[^a-z -]%';
DECLARE @firstName VARCHAR(100) = 'Çranko'

IF @firstName LIKE @firstNameRegex
BEGIN
    PRINT 'YES'
END
ELSE
BEGIN
   PRINT 'NO'
END

似乎在执行 LIKE 时会将 Ç 转换为 C 并通过,但不应该。 还要注意,COLLATION 设置为 SQL_Latin1_General_Cp1251_CS_AS。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 你应该使用一个更清楚地显示变音符号的例子
  • Like 不是正则表达式,^ 不是

标签: regex tsql diacritics


【解决方案1】:

相当肯定的范围是什么打破了你想要的
把整个字母表放进去

'%[^abcdefghijklmnopqrstuvwxyz -]%'

我只用 '%[^cranko -]%' 进行测试,但它对我有用

【讨论】:

  • 是一样的。如果我输入整个字母表没有区别。
  • 不知道该告诉你什么。我用 cranco 进行了测试,它对我有用。
  • 当我尝试使用整个字母表时,上面的脚本总是返回 NO,无论我输入哪个字符。对于范围,它适用于某些字符,例如ŠĐČĆ,但不适用于其他人,例如Â, Ã, Ä, Å, Ù, Ú, È, Í, Ó, Õ。请检查一下好吗?
  • 我看不到目的。如果我们连 '%[^cranko -]%' 都没有得到相同的结果,那么显然这是一个环境问题
猜你喜欢
  • 2016-09-09
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 2012-10-27
  • 2016-05-24
相关资源
最近更新 更多