我正在為 SQL Server 進行資料匿名化。
我有這 3 個公式可以幫助我創建我想要的:
SELECT CHAR(cast((90 - 65) * rand() 65 AS INTEGER)) -- only letters
SELECT CAST((128 - 48) * RAND() 48 AS INTEGER) -- only numbers
SELECT CHAR(CAST((128 - 48) * RAND() 48 AS INTEGER)) -- letters, numbers, symbols
但是,這只能創建1 個數字或1 個字母或1 個符號。
我想要自由,讓我可以創建一個隨機字串或我想要的長度的數字。像3 或 5 個數字,3 或 5 個字母,數字、字母或符號之間的 3 或 5。
我還發現了一些非常接近我想要的東西:
SELECT LEFT(CAST(NEWID() AS VARCHAR(100)), 3) -- letters and numbers
這是一個非常聰明的想法,因為NEWID()它允許我創建一個隨機序列的數字和我想要的長度的字母(在這種情況下為 3)。但是缺少符號。
我需要 3 個不同的SELECT:
- 一個只為數字
- 一個只用于字母
- 一種用于數字、字母和符號
可以自由選擇資料的長度。
uj5u.com熱心網友回復:
一個完整的解決方案需要一些作業,但如果您仍然需要,以下是您可能想要進一步試驗的想法的作業原理:
declare @type varchar(10)='letters', @length tinyint=5;
with chars as (
select top(59) 31 Row_Number() over (order by (select 1)) n from master.dbo.spt_values
), s as (
select top (@length) Char(n.n) c
from chars n
where @type='all'
or (@type='symbols' and n between 33 and 47)
or (@type='numbers' and n between 48 and 57)
or (@type='letters' and n between 65 and 90)
order by newid()
)
select String_Agg(s.c,'')
from s
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374179.html
標籤:sql sql-server 查询语句 随机的 数据屏蔽
上一篇:在表格中尋找重疊
下一篇:我的插入陳述句沒有插入任何行
