![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
String Code Generation (для знатоков PL_SQL) [MSSQL]
sky3d © (2002-10-30 13:13:00)MSSQL2000: нужна function or код для trigger-а.
Не подскажете как в получить строку переменного размера c
заданными пределами (напр. мin=10 max=20 символов) длины
содержащие случайные буквы и цифры
То есть надо сгенерировать некий код записав его в соотв. поле впоследствии на триггере.
например результат должен выглядеть примерно так:
LJSR3AAI5MSM7PKU
FT3M234TNOU2M54JKTIG
Я думаю здесь не обойтись без RAND, ASCII, CHAR, UPPER
Хотелось бы увидеть решение.
Thanx
Sky3d
Delirium (2002-10-30 18:04:00) [1]Для того, что бы были вариаты необходимо понять требования, ты говоришь "с обязательным наличием букв", каких? В каком процентном отношении? Есть-ли у множества ограничения? И в конце концов, зачем сие творить средствами Т-SQL?
sky3d (2002-10-30 17:54:00) [2]Цель эксперимента заключена в следующем:
в получени некоего кода из цифр с обязательнымналичием букв с переменной длиной (не обязательно большой, но ограниченной пределами) средствами SQL.
PS Да действительно дискуссия перешла из практического вопроса в чисто теоретическую. Поэтому можно и завершить, хотя если есть варианты, то... =)
Delirium (2002-10-30 17:44:00) [3]> sky3d ©
Вообще говоря, GUID идентифицирует
2^8*16=3,403e+38 значений - астрономическая величина ;) Так что остаётся неясным смысл задачи, если смысл - эксперимент из серии "от нечего делать", пора это ветку в "Потрепаться".
sky3d (2002-10-30 17:38:00) [4]Не совсем ключа, но в общем генерация некого кода. (хотя как оказалось GUID вполне пойдет для этой конкретной задачи).
Под переменной длиной подразумевалась случайнаядлина, сгенерированная в определенных пределах, а не жестко установленное или переданное как параметр (что невозможно в данной ситуации) значение.
Насчет мало? хм нисколько, хотелось бы еще поиметь кроме цифр еще и буквы.
Также хотелось бы узнать поподробнее насчет
"склейка из хеш-сумм ограниченная пользователем "
С нетерпением жду продолжения
Всем спасибо
3JIA9I CyKA (2002-10-30 17:31:00) [5]2Delirium
"Не подскажете как в получить строку переменного размера"
Delirium (2002-10-30 17:22:00) [6]> 3JIA9I CyKA © (30.10.02 17:15)
Может я и ошибаюсь, но на мой взгляд, ему нужна генерация
уникального ключа большей разрядности нежели int или GUID. Так как в составе одной транзакции только NEWID() генерирует разные и уникальные значения, думаю склейка из хеш-сумм ограниченная пользователем вполне удовлетворяет смыслу задачи.
Delirium (2002-10-30 17:16:00) [7]Так нужна переменная длина? - Нет проблем
declare @S varchar( 20) set @S=""
while Len(@S)< 10set @S=@S+Convert(varchar,ABS(BINARY_CHECKSUM(NEWID())))
print @S
от 10 до 20 ...?
3JIA9I CyKA (2002-10-30 17:15:00) [8]Кстати, здесь вообще нет вариантов, отвечающих Вашим требованиям.
Хотя вариант от Deliriumлечится до
declare @S varchar(20)
select @S = Convert(varchar,ABS(BINARY_CHECKSUM(NEWID())))
print @S
, так Вам уже ответили. Мало?
sky3d (2002-10-30 17:06:00) [9]2 Delirium ©
Большое спасибо, хотя тоже не переменная длина
2 3JIA9I CyKA ©
PL/SQL Oracle(C) - ну уж извиняйте за неточность, привычка
TSQL конечно :)
Кстати Вашего варианта здесь вообще нет...
Delirium (2002-10-30 16:28:00) [10]Вот чисто цифровой вариант настраиваемой длины
declare @S varchar(20) set @S=""
while Len(@S)<20 set @S=@S+Convert(varchar,ABS(BINARY_CHECKSUM(NEWID())))
print @S
3JIA9I CyKA (2002-10-30 16:07:00) [11]PL_SQL8)
3JIA9I CyKA (2002-10-30 15:55:00) [12]Ваш вариант не отвечает Вашим требованиям. 8)
sky3d (2002-10-30 13:27:00) [13]Нашел как вариант использование NEWID с получением GUID
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
PRINT CONVERT(varchar(255), @myid)
результат
-----------
75FC45BC-EC39-4BD8-AC41-07EF3ACECEFD
с последующим преобразованием
Но интересно, существует ли другое решение для вопроса ?