Форум: "Базы";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c