mysql - 如何将 SQL 查询中的返回值从西里尔文转换为拉丁文

标签 mysql sql

我有一张表,用于存储汽车登记号, 但有些注册号是西里尔字母。如果我搜索注册号“XX0000XX”,其中“X”是拉丁文,而在表中一个或多个“X”是西里尔文,什么也找不到。 有没有办法写这个查询,例如:

Select from cars where reg_num = 'XX0000XX'

以这种方式它也可以找到同时包含西里尔字母和拉丁字母的记录?在 where 子句中,字符串是 100% 的拉丁字母

最佳答案

如果您使用 MS SQL。可以使用音译功能

    GO
/****** Object:  UserDefinedFunction [dbo].[TransLit]    Script Date: 05.04.2017 10:25:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
ALTER FUNCTION [dbo].[TransLit]
(
 @@String VarChar(max)
)
RETURNS VarChar(max)
AS
BEGIN
DECLARE @TransTable TABLE(
   Rus Char 
  ,Lat VarChar(2)
 )INSERT @TransTable SELECT 'А','A'
  UNION ALL SELECT 'Б','B'
  UNION ALL SELECT 'В','V'
  UNION ALL SELECT 'Г','G'
  UNION ALL SELECT 'Д','D'
  UNION ALL SELECT 'Е','E'
  UNION ALL SELECT 'Ё','YO'
  UNION ALL SELECT 'Ж','ZH'
  UNION ALL SELECT 'З','Z'
  UNION ALL SELECT 'И','I'
  UNION ALL SELECT 'Й','Y'
  UNION ALL SELECT 'К','K'
  UNION ALL SELECT 'Л','L'
  UNION ALL SELECT 'М','M'
  UNION ALL SELECT 'Н','N'
  UNION ALL SELECT 'О','O'
  UNION ALL SELECT 'П','P'
  UNION ALL SELECT 'Р','R'
  UNION ALL SELECT 'С','S'
  UNION ALL SELECT 'Т','T'
  UNION ALL SELECT 'У','U'
  UNION ALL SELECT 'Ф','F'
  UNION ALL SELECT 'Х','H'
  UNION ALL SELECT 'Ц','C'
  UNION ALL SELECT 'Ч','CH'
  UNION ALL SELECT 'Ш','SH'
  UNION ALL SELECT 'Щ','SH'
  UNION ALL SELECT 'Ъ',''''
  UNION ALL SELECT 'Ы','Y'
  UNION ALL SELECT 'Ь',''''
  UNION ALL SELECT 'Э','E'
  UNION ALL SELECT 'Ю','YU'
  UNION ALL SELECT 'Я','YA'

 DECLARE @Result VarChar(max)
 SET @Result = @@String
 SELECT @Result = Replace(@Result,Upper(Rus) COLLATE Cyrillic_General_CS_AS,Upper(Lat)) FROM @TransTable WHERE @@String LIKE '%' + Rus + '%'
 SELECT @Result = Replace(@Result,Lower(Rus) COLLATE Cyrillic_General_CI_AS,Lower(Lat)) FROM @TransTable WHERE @@String LIKE '%' + Rus + '%'
 RETURN @Result
END

然后是你的脚本

Select * from cars where TransLit(reg_num) = 'XX0000XX'

在“XX0000XX”中使用拉丁语。

关于mysql - 如何将 SQL 查询中的返回值从西里尔文转换为拉丁文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299144/

相关文章:

java - JDBC 和 MySQL 真的很慢,不知道为什么

java - WebSecurityConfigurerAdapter 中 httpBasic 和 jdbcAuthentication 的用户验证问题

mysql - 选择查询 |选择不以数字开头的整体 - MySQL

sql - 如何在 postgresql 和 rails 3 中按月分组

c# - 如何使用 C# 向表中的 GUID 列插入空值?

sql - 基本问题 : basic PL/SQL console output?

mysql - XAMPP 不工作! - OS X优胜美地

php - MySQL 多个表或单个字段的多个值?

android - 在android中使用rawQuery查询数据库

c++ - 在C++/Qt中以文本格式序列化数据结构