【发布时间】:2022-08-14 20:31:44
【问题描述】:
我被要求仅从 SQL Server 的列中查询姓名和姓氏的首字母。其余的应该是 \"*\" 而不是字母
例如:Waldemar Fisar,应该像这样查询。 W***** F****
更新的问题: 我得到这个:
- 约翰·斯诺查询后变为杰士
- 劳拉怀特查询后变为长宽
但需要得到:
-约翰·斯诺应该变成 J*** S***
-乔纳森·柯南J***** C****
SELECT
Personal info, SUBSTRING([Primary Contact], 1, 1) + \' \' +
SUBSTRING([Primary Contact], CHARINDEX(\' \', [Primary Contact]) + 1, 1) AS CI
FROM
xx
-
老实说,T-SQL 并不适合这项任务。你最好屏蔽这些值前您将它们传递给 SQL Server。
-
我在实习。导师的任务就是这样。在 MSSQL 上工作。
-
是什么实际的给你的任务?另外,如果这是家庭作业,请阅读How do I ask and answer homework questions?;我们给你的答案不是你的导师要求的,而是他们想要的你回答这个问题,不是别人。尽管我的观点是,T-SQL 是一种糟糕的语言。你可以看看Dynamic Data Masking,但这不会改变值,它只是为某些用户屏蔽。
-
REPLICATE(N\'*\', 11) 得到你
***********。 LEN(N\'Fisar\') 得到你5。您可以使用SUBSTRING(N\'Fisar\', 1, 1) 获取文本字符串的第一个字符。那应该让你开始。您花在学习使用 DBMS\ 的字符串处理函数上的时间不会被浪费。 -
如果您做了明智的事情并将名称保存在单独的列中,那么您可以简单地做
MASKED WITH (FUNCTION = \'partial(1,\"********************\",0)\')
标签: sql sql-server wildcard