Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.008 c
1-59206
sad
2002-11-04 09:53
2002.11.18
Печать канвы TeeChart


1-59129
appp
2002-11-08 13:10
2002.11.18
ListView


4-59481
Beginer1
2002-10-07 16:35
2002.11.18
FindFirstFile


1-59160
Павел Хабаров
2002-11-06 12:29
2002.11.18
Печать текстового файла


1-59273
chips
2002-11-06 10:36
2002.11.18
передача параметров приложению





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский