Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.18;
Скачать: CL | DM;

Вниз

String Code Generation (для знатоков PL_SQL)   Найти похожие ветки 

 
sky3d ©   (2002-10-30 13:13) [0]

MSSQL2000: нужна function or код для trigger-а.

Не подскажете как в получить строку переменного размера c
заданными пределами (напр. мin=10 max=20 символов) длины
содержащие случайные буквы и цифры

То есть надо сгенерировать некий код записав его в соотв. поле впоследствии на триггере.

например результат должен выглядеть примерно так:
LJSR3AAI5MSM7PKU
FT3M234TNOU2M54JKTIG

Я думаю здесь не обойтись без RAND, ASCII, CHAR, UPPER
Хотелось бы увидеть решение.

Thanx
Sky3d


 
sky3d ©   (2002-10-30 13:27) [1]

Нашел как вариант использование NEWID с получением GUID

DECLARE @myid uniqueidentifier
SET @myid = NEWID()
PRINT CONVERT(varchar(255), @myid)

результат
-----------
75FC45BC-EC39-4BD8-AC41-07EF3ACECEFD

с последующим преобразованием

Но интересно, существует ли другое решение для вопроса ?


 
3JIA9I CyKA ©   (2002-10-30 15:55) [2]

Ваш вариант не отвечает Вашим требованиям. 8)


 
3JIA9I CyKA ©   (2002-10-30 16:07) [3]

PL_SQL 8)


 
Delirium ©   (2002-10-30 16:28) [4]

Вот чисто цифровой вариант настраиваемой длины

declare @S varchar(20) set @S=""
while Len(@S)<20 set @S=@S+Convert(varchar,ABS(BINARY_CHECKSUM(NEWID())))
print @S


 
sky3d ©   (2002-10-30 17:06) [5]

2 Delirium ©
Большое спасибо, хотя тоже не переменная длина


2 3JIA9I CyKA ©
PL/SQL Oracle(C) - ну уж извиняйте за неточность, привычка
TSQL конечно :)
Кстати Вашего варианта здесь вообще нет...





 
3JIA9I CyKA ©   (2002-10-30 17:15) [6]

Кстати, здесь вообще нет вариантов, отвечающих Вашим требованиям.
Хотя вариант от Delirium лечится до

declare @S varchar(20)
select @S = Convert(varchar,ABS(BINARY_CHECKSUM(NEWID())))
print @S

, так Вам уже ответили. Мало?


 
Delirium ©   (2002-10-30 17:16) [7]

Так нужна переменная длина? - Нет проблем

declare @S varchar( 20) set @S=""
while Len(@S)< 10 set @S=@S+Convert(varchar,ABS(BINARY_CHECKSUM(NEWID())))
print @S


от 10 до 20 ...?


 
Delirium ©   (2002-10-30 17:22) [8]

> 3JIA9I CyKA © (30.10.02 17:15)

Может я и ошибаюсь, но на мой взгляд, ему нужна генерация
уникального ключа большей разрядности нежели int или GUID. Так как в составе одной транзакции только NEWID() генерирует разные и уникальные значения, думаю склейка из хеш-сумм ограниченная пользователем вполне удовлетворяет смыслу задачи.


 
3JIA9I CyKA ©   (2002-10-30 17:31) [9]

2Delirium
"Не подскажете как в получить строку переменного размера"


 
sky3d ©   (2002-10-30 17:38) [10]

Не совсем ключа, но в общем генерация некого кода. (хотя как оказалось GUID вполне пойдет для этой конкретной задачи).

Под переменной длиной подразумевалась случайная длина, сгенерированная в определенных пределах, а не жестко установленное или переданное как параметр (что невозможно в данной ситуации) значение.

Насчет мало? хм нисколько, хотелось бы еще поиметь кроме цифр еще и буквы.

Также хотелось бы узнать поподробнее насчет
"склейка из хеш-сумм ограниченная пользователем "

С нетерпением жду продолжения
Всем спасибо


 
Delirium ©   (2002-10-30 17:44) [11]

> sky3d ©

Вообще говоря, GUID идентифицирует
2^8*16=3,403e+38 значений - астрономическая величина ;) Так что остаётся неясным смысл задачи, если смысл - эксперимент из серии "от нечего делать", пора это ветку в "Потрепаться".



 
sky3d ©   (2002-10-30 17:54) [12]

Цель эксперимента заключена в следующем:

в получени некоего кода из цифр с обязательным наличием букв с переменной длиной (не обязательно большой, но ограниченной пределами) средствами SQL.

PS Да действительно дискуссия перешла из практического вопроса в чисто теоретическую. Поэтому можно и завершить, хотя если есть варианты, то... =)


 
Delirium ©   (2002-10-30 18:04) [13]

Для того, что бы были вариаты необходимо понять требования, ты говоришь "с обязательным наличием букв", каких? В каком процентном отношении? Есть-ли у множества ограничения? И в конце концов, зачем сие творить средствами Т-SQL?



Страницы: 1 вся ветка

Текущий архив: 2002.11.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
7-59451
Polevi
2002-09-18 19:09
2002.11.18
Интересная проблемка..


3-59034
Юрий
2002-10-29 23:32
2002.11.18
Где данные после TADOQuery?


14-59431
Карлсон
2002-10-30 20:20
2002.11.18
электроны....


6-59296
Aleksandr
2002-09-20 14:32
2002.11.18
Как подойти к работе с Прокси-серверами?


3-59019
CrowD
2002-10-29 15:21
2002.11.18
Query из txt?