Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо