在SQL中避免使用NEWID()中的某些字符

在SQL中避免使用NEWID()中的某些字符,sql,sql-server,database,sql-server-2008,newid,Sql,Sql Server,Database,Sql Server 2008,Newid,我有一个包含id和name列的表。在id列中,插入使用NEWID()生成的键 SET @myid = NEWID() SELECT @id = SUBSTRING(CONVERT(varchar(255), @myid), LEN(@myid)-5, LEN(@myid)) 这可能是一些随机生成的字母数字键,但我想避免使用该键中的字母O和数字0。O和0的简单替换将不起作用。是否有其他方法可以执行此操作?该函数生成一个UNIQUEIDENTIFIER值AKA。你无法控制价值是什么,这也不重要。如

我有一个包含
id
name
列的表。在id列中,插入使用
NEWID()
生成的键

SET @myid = NEWID()
SELECT @id = SUBSTRING(CONVERT(varchar(255), @myid), LEN(@myid)-5, LEN(@myid))
这可能是一些随机生成的字母数字键,但我想避免使用该键中的字母O和数字0。O和0的简单替换将不起作用。是否有其他方法可以执行此操作?

该函数生成一个
UNIQUEIDENTIFIER
值AKA。你无法控制价值是什么,这也不重要。如果你需要控制它,那就说明你用错了。它不仅仅是随机生成的字符串(我建议您在我提供的链接中阅读有关GUID的内容)


GUID值由十六进制字符组成,即0-9和A-F。因此,您永远不会有字母
O

简单地替换O和0将不起作用,因为如果不了解您的要求和约束,就无法确定是否有“更好”的方法来实现“这一点”。但是,至少您可以将对
LEN
的第二次调用替换为简单的
6
来写得更清楚一点(IMO)。为什么不在id列中使用类型GUID呢?您想要的字符串id不包含可混淆的字符,因此您希望排除
0
O
O
永远不会出现,所以您只需要担心
0
。为什么不能用例如
H
J
来替换它呢?实际要求是什么?如果这与加密有关,那么出于多种原因,这是一个坏主意。正确与否,这似乎更像是一个评论,除非您可以提供其他解决方案。正确答案。令人惊讶的是,OP对自己处理的事情知之甚少——假设一个O会出现在GUID@LCIII中——有时没有其他解决方案。这个问题特别是关于避免由
NEWID()
生成的字符(标题甚至说明了这一点)。我的回答切中要害。无论哪种方式,我都不觉得我忽略了提供一个替代解决方案会使我的回答仅仅是一个评论。