【问题标题】:How to find Cyrillic font (russian characters)?如何找到西里尔字体(俄语字符)?
【发布时间】:2015-10-14 20:59:50
【问题描述】:

想法是找到所有包含 Cyrillic 字体(俄语字符)的值。

类似:

SELECT CASE 
         WHEN Name LIKE /* Cyrillic font / russian characters */ THEN '1' 
         ELSE Name 
       END AS Filter

我找不到任何关于它的信息,所以我无法提供我尝试过的内容。

例如:

  Name
Александр -- This is Cyrillic (have russian characters, should return 1)
John      -- This should be returned as normal Name

你有什么想法吗?

【问题讨论】:

  • 我假设“A”是拉丁文“A”而不是带有特殊代码的西里尔字符?如果您可以只搜索第一个字符,那么它会容易得多,因为您只需要检查 char 是否在 Unicode 代码的西里尔字母范围内,否则您需要对每个 char 进行循环,这将慢慢来
  • 您可以使用this Q&A的答案来检查ASCII a-zA-Z0-9

标签: sql sql-server tsql unicode fonts


【解决方案1】:

根据评论:

This Q&A 提供了在 SQL-Server 中执行此操作的好方法(不能标记为重复,因为它是不同类型的问题):

解决办法:

select *,                               --  ▼ space added here
       case when TheName like '%[^-A-Za-z0-9 /.+$]%'
         then '1'
         else TheName
      end as 'Filter'
  from CyrillicTest

您可以调整 RegEx 字符串以匹配所有西里尔字符,也可以调整它以适应带连字符的 ASCII 名称(以及父母在孩子名字中添加的所有其他奇怪的东西)。 我不确定这个对大桌子的速度,所以请测试一下。

测试平台:

create table CyrillicTest
     ( TheID   int identity(1,1) not null,
       TheName nvarchar(50)      not null )

insert CyrillicTest
     ( TheName )
values
     ( 'AName' ),
     ( 'Александр' ),
     ( 'CName' )

输出:

TheID TheName过滤器 ------------ ------------- ------------- 1 个名字 2 Александр 1 3 三名 三名

【讨论】:

  • 这是示例,但实际上它是 FullName 列,它的名字和姓氏都带有空格。如果我将值传递给空洞空格它选择它为1。例如尝试John Smith
  • @StanislovasKalašnikovas 更新了模式以在检查中包含空格。
猜你喜欢
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多