Generar una cadena aleatoria

08/05/2007 - 19:07 por Mauricio | Informe spam
Hola a todos,
esto no es para mí, pero un amigo necesita generar una cadena
aleatoria para un programa. Definió una función así:
Create Function GenID_Unico (@Fecha Datetime)
Returns Varchar(20)
As
Begin
Declare @RandomNumber as int
SELECT @RandomNumber = rand()
Return (Select Left('123' + '000',3) +
Right('0000' + Cast(Datepart(yyyy,GetDate()) As
Varchar(4)),4) +
Right('00' + Cast(Datepart(mm,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(dd,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(hh,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(mi,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(ss,GetDate()) As
Varchar(2)),2) +
Substring(Cast(@RandomNumber As Varchar(10)),3,3))
End

Pero da un error porque no permite usar rand() dentro de la función.
Hay alguna forma de solucionar esto?
Muchas gracias.

Nota: yo remplacé dentro de la función el parámetro recibido por
getDate(), por eso no figura dentro.

Mauricio
Copenhague, Dinamarca

Preguntas similare

Leer las respuestas

#1 DNC
08/05/2007 - 19:22 | Informe spam
quiza newid()


On 8 mayo, 14:07, Mauricio
wrote:
Hola a todos,
esto no es para mí, pero un amigo necesita generar una cadena
aleatoria para un programa. Definió una función así:
Create Function GenID_Unico (@Fecha Datetime)
Returns Varchar(20)
As
Begin
Declare @RandomNumber as int
SELECT @RandomNumber = rand()
Return (Select Left('123' + '000',3) +
Right('0000' + Cast(Datepart(yyyy,GetDate()) As
Varchar(4)),4) +
Right('00' + Cast(Datepart(mm,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(dd,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(hh,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(mi,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(ss,GetDate()) As
Varchar(2)),2) +
Substring(Cast(@RandomNumber As Varchar(10)),3,3))
End

Pero da un error porque no permite usar rand() dentro de la función.
Hay alguna forma de solucionar esto?
Muchas gracias.

Nota: yo remplacé dentro de la función el parámetro recibido por
getDate(), por eso no figura dentro.

Mauricio
Copenhague, Dinamarca
Respuesta Responder a este mensaje
#2 Rubén Vigón
08/05/2007 - 19:25 | Informe spam
SELECT REPLACE(NewId(), '-', '') AS CadenaAleatoria

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org
Respuesta Responder a este mensaje
#3 Alejandro Mesa
08/05/2007 - 19:29 | Informe spam
Mauricio,

Aplica el mismo principio que usastes con la fecha.

Create Function dbo.GenID_Unico (
@Fecha Datetime,
@RandomNumber float
)
Returns Varchar(20)
As
Begin

Return (Select Left('123' + '000',3) +
Right('0000' + Cast(Datepart(yyyy,@Fecha) As
Varchar(4)),4) +
Right('00' + Cast(Datepart(mm,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(dd,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(hh,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(mi,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(ss,@Fecha) As
Varchar(2)),2) +
Substring(Cast(@RandomNumber As Varchar(10)),3,3))
End
go

select dbo.GenID_Unico(getdate(), rand())
go

drop function dbo.GenID_Unico
go

Tambien puedes usar:

Create Function dbo.GenID_Unico (
@Fecha Datetime,
@RandomNumber int
)
Returns Varchar(20)
As
Begin

Return (Select Left('123' + '000',3) +
Right('0000' + Cast(Datepart(yyyy,@Fecha) As
Varchar(4)),4) +
Right('00' + Cast(Datepart(mm,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(dd,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(hh,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(mi,@Fecha) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(ss,@Fecha) As
Varchar(2)),2) +
Substring(Cast(@RandomNumber As Varchar(10)),3,3))
End
go

select dbo.GenID_Unico(getdate(), abs(checksum(newid())))
go

drop function dbo.GenID_Unico
go


AMB


"Mauricio" wrote:

Hola a todos,
esto no es para mí, pero un amigo necesita generar una cadena
aleatoria para un programa. Definió una función así:
Create Function GenID_Unico (@Fecha Datetime)
Returns Varchar(20)
As
Begin
Declare @RandomNumber as int
SELECT @RandomNumber = rand()
Return (Select Left('123' + '000',3) +
Right('0000' + Cast(Datepart(yyyy,GetDate()) As
Varchar(4)),4) +
Right('00' + Cast(Datepart(mm,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(dd,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(hh,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(mi,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(ss,GetDate()) As
Varchar(2)),2) +
Substring(Cast(@RandomNumber As Varchar(10)),3,3))
End

Pero da un error porque no permite usar rand() dentro de la función.
Hay alguna forma de solucionar esto?
Muchas gracias.

Nota: yo remplacé dentro de la función el parámetro recibido por
getDate(), por eso no figura dentro.

Mauricio
Copenhague, Dinamarca



Respuesta Responder a este mensaje
#4 iislas
08/05/2007 - 19:49 | Informe spam
On 8 mayo, 12:07, Mauricio
wrote:
Hola a todos,
esto no es para mí, pero un amigo necesita generar una cadena
aleatoria para un programa. Definió una función así:
Create Function GenID_Unico (@Fecha Datetime)
Returns Varchar(20)
As
Begin
Declare @RandomNumber as int
SELECT @RandomNumber = rand()
Return (Select Left('123' + '000',3) +
Right('0000' + Cast(Datepart(yyyy,GetDate()) As
Varchar(4)),4) +
Right('00' + Cast(Datepart(mm,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(dd,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(hh,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(mi,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(ss,GetDate()) As
Varchar(2)),2) +
Substring(Cast(@RandomNumber As Varchar(10)),3,3))
End

Pero da un error porque no permite usar rand() dentro de la función.
Hay alguna forma de solucionar esto?
Muchas gracias.

Nota: yo remplacé dentro de la función el parámetro recibido por
getDate(), por eso no figura dentro.

Mauricio
Copenhague, Dinamarca



Mauricio

¿Porque no envias el numero random como parametro de la funcion?
Respuesta Responder a este mensaje
#5 Mauricio
08/05/2007 - 19:57 | Informe spam
iislas a utilisé son clavier pour écrire :
On 8 mayo, 12:07, Mauricio
wrote:
Hola a todos,
esto no es para mí, pero un amigo necesita generar una cadena
aleatoria para un programa. Definió una función así:
Create Function GenID_Unico (@Fecha Datetime)
Returns Varchar(20)
As
Begin
Declare @RandomNumber as int
SELECT @RandomNumber = rand()
Return (Select Left('123' + '000',3) +
Right('0000' + Cast(Datepart(yyyy,GetDate()) As
Varchar(4)),4) +
Right('00' + Cast(Datepart(mm,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(dd,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(hh,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(mi,GetDate()) As
Varchar(2)),2) +
Right('00' + Cast(Datepart(ss,GetDate()) As
Varchar(2)),2) +
Substring(Cast(@RandomNumber As Varchar(10)),3,3))
End

Pero da un error porque no permite usar rand() dentro de la función.
Hay alguna forma de solucionar esto?
Muchas gracias.

Nota: yo remplacé dentro de la función el parámetro recibido por
getDate(), por eso no figura dentro.

Mauricio
Copenhague, Dinamarca



Mauricio

¿Porque no envias el numero random como parametro de la funcion?



Eso es lo que hice, siguiendo las indicaciones de Alejandro, y funcionó
a la perfección. Muchas gracias a todos!!!!

Mauricio
Copenhague, Dinamarca
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida