sql - 如何检查Oracle sql中列之间单词的前两个字符是否相等
问题描述
我正在尝试比较原始字符串和屏蔽字符串是否相等。我想比较每个单词的前两个字符是否相同。我正在使用 Oracle sql 12c。
例如,假设我有一个User
表和列,name_request
并且name_response
这些记录的比较应该返回 true:
| name_request | name_response |
+--------------------+--------------------+
| steve jobs | st*** jo** |
| sergey george brin | se**** ge**** br** |
这些记录为假:
| bill gates | jo** he*** |
| steve jhon wozniak | he*** va** |
任何人都可以帮助我吗?
解决方案
如果您使用 SQL Server 2017+ 并想尝试基于 JSON 的方法,您可以使用以下语句。这种方法的重要部分是将名称转换为有效的 JSON 数组(steve jobs
转换为["steve","jobs"]
)。之后,使用OPENJSON()
,您可以解析此数组并匹配original
和encrypted
名称中的每个部分:
桌子:
CREATE TABLE Users (
name_request varchar(100),
name_response varchar(100)
)
INSERT INTO Users
(name_request, name_response)
VALUES
('steve jobs', 'st*** jj**'),
('steve jobs', 'st*** jo**'),
('sergey george brin', 'se**** ge**** br**'),
('bill gates', 'jo** he***'),
('steve jhon wozniak', 'he*** va**')
陈述:
SELECT
u.*,
CASE WHEN a.words = a.matches THEN 'true' ELSE 'false' END AS result
FROM Users u
OUTER APPLY (
SELECT
SUM(1) AS [words],
SUM(CASE WHEN LEFT(j1.[value], 2) = LEFT(j2.[value], 2) THEN 1 ELSE 0 END) AS [matches]
FROM OPENJSON(CONCAT('["', REPLACE(STRING_ESCAPE(u.name_request, 'json'), ' ', '","'), '"]')) j1
FULL JOIN OPENJSON(CONCAT('["', REPLACE(STRING_ESCAPE(u.name_response, 'json'), ' ', '","'), '"]')) j2
ON j1.[key] = j2.[key]
) a
结果:
----------------------------------------------
name_request name_response result
----------------------------------------------
steve jobs st*** jj** false
steve jobs st*** jo** true
sergey george brin se**** ge**** br** true
bill gates jo** he*** false
steve jhon wozniak he*** va** false
推荐阅读
- c - 隐式声明错误链表 C
- javascript - Javascript:隐藏警报并放置 cookie
- python - Django 'string_if_invalid' 非默认行为
- javascript - 单击div类a href按钮时如何关注输入元素
- model-view-controller - 如何使剑道网格的特定列可编辑?
- assembly - 添加新的 GNU 汇编器 x86 指令并重新编译的源代码
- mainframe - 根据第一个字节将多条记录合并为一行
- java - 如何在android中的一个zip文件中压缩多个文件夹?
- ios - 将 UILabel 添加到自定义 UIView 但不显示在 UIImage 视图上
- android - FOREIGN KEY 约束失败(代码 787)[NO ANDROID ROOM]