【问题标题】:How to query only first letters of name and surname in CONTACTS column in SQL Server如何在 SQL Server 的 CONTACTS 列中仅查询姓名和姓氏的首字母
【发布时间】: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


【解决方案1】:

您可以为该任务编写一个函数,如下例所示:

create function hide_name(@text nvarchar(max), @ch nchar(1), @n int)
returns nvarchar(max)
as
begin
    return LEFT(@text, @n) + REPLICATE(@ch, LEN(@text) - @n)
end

go

SELECT 
dbo.hide_name(yourNameColumn, '*', 1) + ' '  +  dbo.hide_name(yourFamilyNameColumn, '*', 1) 
FROM yourTableName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多