gpt4 book ai didi

sql - 如何从 SQL 查询生成字母数字值?

转载 作者:行者123 更新时间:2023-12-02 22:45:15 27 4
gpt4 key购买 nike

我在存储过程中使用以下代码创建 8 位密码并将其作为输出返回。

select @AuthKey = @AuthKey + char(n) from
(
select top 8 number as n from master.. spt_values
where type= 'p' and number between 48 and 57
order by newid()
) as t

但我希望输出为字母数字值,而不仅仅是数字值。我怎样才能得到它?

最佳答案

Anuya——这是一种非常聪明的随机化值的方法,使用order by newid()。如果您的密码区分大小写,您还可以使用小写字符:

declare @AuthKey varchar(255)
set @AuthKey = ''
select @AuthKey = @AuthKey + char(n) from
(
select top 8 number as n
from master..spt_values
where type= 'p' and (
(number between 48 and 57) -- numbers
or (number between 65 and 90) -- uppercase letters
or (number between 97 and 122) -- lowercase letters
)
order by newid()
) as t
print @AuthKey

使用稍微不同的方法,您可以包含特定的字符集,包括符号:

declare @AuthKey varchar(255), @chars varchar(255), @len int
set @AuthKey = ''
set @chars = '012345ACDFGIJKLMSTXYZ_-#@!'
set @len = len(@chars)

select @AuthKey = @AuthKey + chr.c
from (
select substring(@chars, num.n, 1) as c
from (
select top 8 number as n
from master..spt_values
where type='p' and (number between 1 and @len)
order by newid()
) as num
) as chr
print @AuthKey

当然,这只包括任何给定的字符一次。尽管如此,它仍然是一种非常聪明的生成密码的方法。荣誉!

编辑:如果你想有机会获得 double ,你可以这样做:

declare @AuthKey varchar(255), @chars varchar(255), @len int
set @AuthKey = ''
set @chars = '012345ACDFGIJKLMSTXYZ_-#@!'
set @len = len(@chars)

SELECT TOP 8 @AuthKey = @AuthKey + SubString(@chars, 1 + Convert(int, ABS(BINARY_CHECKSUM(NewID())) % @len), 1)
FROM master..spt_values

(也会稍微快一些,因为查询不需要对 spt_values 进行排序。

关于sql - 如何从 SQL 查询生成字母数字值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419615/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com