首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以特定格式创建唯一的序列号字符串?

如何以特定格式创建唯一的序列号字符串?
EN

Stack Overflow用户
提问于 2016-01-19 21:41:23
回答 3查看 1.6K关注 0票数 2

我想用一些序列号填充我的Server表,以便提供给其他人。它们只是有效的UUID,它与人的电子邮件地址有关。

我可以看到ColdFusion提供了CreateUUID函数,但它生成了一个ID,格式为:

这是按照8-4-4-16的结构。我只想要一些简单的东西,比如3-3-3格式,它将对表中的每一行(即每个客户)都是唯一的。

解决这个问题的最好方法是什么?我不介意在SQL或ColdFusion中这样做,但我不知道如何让它们中的任何一个为我自动生成这样的字符串。Server具有NEWID()函数,但它仍然生成不符合我所需格式的大型字符串。

有没有办法强迫SQL的NewID()或CF的CreateUUID创建一个独特的3-3-3格式的串行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-19 21:53:42

您可以使用这样的内容,它将生成您要寻找的格式:

代码语言:javascript
复制
DECLARE @Value VARCHAR(100)
SELECT @Value = NEWID()
SELECT @Value
SELECT SUBSTRING(@Value,1,3) + '-' + SUBSTRING(@Value,10,3) + '-' + SUBSTRING(@Value,30,3)
票数 1
EN

Stack Overflow用户

发布于 2016-01-19 23:11:46

序列号应该是唯一的。保证您的电子邮件地址的唯一序列号的一种方法是格式化标识列。如果您的电子邮件表还没有一个标识列,请添加一个。让我们说它的名字是Email_ID,然后下面的表达式将给您一个字符串,它的形式是XXX-XXX-XXX,它保证了电子邮件表的惟一性。

代码语言:javascript
复制
SELECT
  STUFF(STUFF(RIGHT('000000000' + CAST(Email_ID AS VARCHAR(9)), 9), 4, 0, '-'), 8, 0, '-')
FROM
  EmailTable
票数 3
EN

Stack Overflow用户

发布于 2016-01-24 15:25:52

您可以创建一个随机的9个字符字符串,然后检查它在客户/人员表中是否是唯一的。如果不是->,创建一个新的随机字符串并再次检查。(循环直到它是唯一的)。

我为此创建了两个函数,一个随机生成9个字符的字符串,另一个使用第一个函数创建一个字符串,然后检查一个表,看看这个字符串是否存在于特定的列中。

随机字符串函数:

代码语言:javascript
复制
<cffunction name="makeRandomString" returnType="string" output="false">
    <cfargument name="codeLength" type="numeric" required="no" default="9">

   <cfset var chars = "123456789ABCDEFGHIJKLMNPQRSTUVWXYZ">
   <cfset var length = codeLength>
   <cfset var result = "">
   <cfset var i = "">
   <cfset var char = "">

   <cfscript>
   for(i=1; i <= length; i++) {
      char = mid(chars, randRange(1, len(chars)),1);
      result&=char;
   }
   </cfscript>

   <cfreturn result>
</cffunction>

函数,该函数创建随机字符串,并确保它在特定表的特定列中是唯一的:

代码语言:javascript
复制
<cffunction name="createUniqueCode" returnType="string" output="false">

    <cfargument name="tableName" type="string" required="yes">
    <cfargument name="columnName" type="string" required="yes">
    <cfargument name="codeLength" type="numeric" required="no" default="9">

    <cfset ordercode = 0>
    <cfset ordercodecheck = 0>
    <cfloop condition="ordercodecheck eq 0">
        <cfset ordercode = #makeRandomString('#codeLength#')#>
        <cfquery name="findCode" datasource="#application.datasource#">
        select #kolomNaam# from #tableName# where #columnName# = '#ordercode#'
        </cfquery>
        <cfif findCode.recordcount eq 0>
            <cfset ordercodecheck = 1>
        </cfif>
    </cfloop>

    <cfreturn ordercode>

</cffunction>

现在,您可以循环x次,并生成x个随机代码,这将永远是唯一的。(下面示例中的“myColumnName”是包含唯一代码的列的名称)

代码语言:javascript
复制
<cfloop from="1" to="100" index="i">
    <cfset newCode = createUniqueCode(tableName='myTableName',columnName='myColumnName')>

    <!--- insert what to do with new code here (f.e. an insert query) the "newCode" variable holds the new unique code. --->
</cfloop>

我希望这对你有什么帮助。

干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34887472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档