Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

AlphaNumeric Sequence

[es] :: MS SQL :: AlphaNumeric Sequence

[ Pregleda: 2585 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
159.20.31.*



+3 Profil

icon AlphaNumeric Sequence01.08.2016. u 11:19 - pre 93 meseci
Imam tabelu (Submission jedna od kolona je DocNo), druga tabela koja je DocDetalis koja je u relaciji sa Submission (jedan prema beskonacno). U tabeli DocDetalis cuvam sve dokumente koji su uneti za taj Submission...Ime dokumenta treba da mi je DocNo + karakter, sto znaci ako imam nekoj submission sa broj 51 dokumeti koje se zakace za tah ID treba da izgledaju ovako. Pitanje je neka logika pomos kako da generisem to. Hvala

51A
51B
...
...
...
51Z
51AA
51AB
51AC
...
...
51AZ
51BA
51BB
...
...
...
51ZZ
51AAA
51AAB
...
...

Kude tumbe i tri bandere
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: AlphaNumeric Sequence01.08.2016. u 11:55 - pre 93 meseci
Ta sekvenca je u stvari broj sa bazom 27 čije su cifre [0, A..Z].
Cifre imaju sledeće vrednosti:
Code:

0 = 0
A = 1
B = 2
C = 3
...
Z = 26


U pricipu, trebaju ti dve funkcije:
1. Pretvaranje iz sekvence u INT
2. Pretvaranje iz INT-a u sekvencu

Da bi ti bilo lakše, možeš da uzmeš fiksnu dužinu sekvence, recimo 5 karaktera.
Tako dobijaš sledeće:
Code:

1 = 0000A
2 = 0000B
3 = 0000C
4 = 0000D
...
82 = 000CA
...
89 = 000CH
...


Pretvaranje iz sekvence u INT:
Code:

S0 + S1*27 + S2*27^2 + S3*27^3 + S4*27^4

Gde je S0 vrednost poslednje cifre sekvence,
S1 vrednost pretposlednje cifre sekvence, itd...
Pre nego što kreneš u konverziju, ako je sekvenca kraća od 5 karaktera,
dodaš ispred nje cifre 0:
GCN => 00GCN
F=> 0000F

Pretvaranje INT-a u sekvencu:
Code:

S0 = X % 27
X = X / 27
S1 = X % 27
X = X / 27
S2 = X % 27
X = X / 27
S3 = X % 27
X = X / 27
S4 = X % 27

Gde je X broj koji pretvaraš u sekvencu,
S0 vrednost poslednje cifre sekvence,
S1 vrednost pretposlednje cifre sekvence, itd...

Na kraju, kada si dobio sve cifre sekvence,
uradiš remove svih vodećih 0 cifara osim poslednje, npr:
0000A => A
000CH => CH

Pomoću ove dve funkcije možeš da dobiješ redni broj doc detail-a i da generišeš sledeći, ili šta ti već bude trebalo.

[Ovu poruku je menjao dusans dana 01.08.2016. u 13:10 GMT+1]
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
159.20.31.*



+3 Profil

icon Re: AlphaNumeric Sequence01.08.2016. u 12:38 - pre 93 meseci
Pimer, Ako imam zadnji zapis AE kad se on pretvori izadje recimo 156 sledeca sekvenca koja meni treba e AF sto bi bila 157? Ako sam dobro razumeo
Kude tumbe i tri bandere
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: AlphaNumeric Sequence01.08.2016. u 12:55 - pre 93 meseci
Da, tako je.
Nego sad gledam i vidim da sam se prešao oko baze 27, ipak sam trebao da radim sa 26.

Uglavnom, pogledaj pa prevedi neko od ovih rešenja, batali ovo moje:
http://stackoverflow.com/quest...an-alphabetic-sequence-in-java
https://en.wikipedia.org/w/ind...id=578218059#Bijective_base-26
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
159.20.31.*



+3 Profil

icon Re: AlphaNumeric Sequence01.08.2016. u 13:03 - pre 93 meseci
Resen problem Hvala :) Kad zavrsim kacim kod hvala jos jednom
Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
*.i11-5.onvol.net.



+3 Profil

icon Re: AlphaNumeric Sequence01.08.2016. u 20:27 - pre 93 meseci
evo i koda. Ovoj kod radi do pet karaktera, sada probujem da odradim za N karaktera pa videcemo...

Code:

DECLARE @letter varchar(5) = 'zz'; --ovde ucitujem zadnji unos podregenog para primer 'abc' 
DECLARE @num int = 0;
DECLARE @number TABLE(Number int, RowNumber int);

SELECT @letter = REVERSE(@letter)

INSERT INTO @number
SELECT CAST(ASCII(substring(a.b, v.number+1, 1)) AS int) - 96 AS Number, (ROW_NUMBER() OVER (ORDER BY Number) - 1) AS RowNumber
FROM (SELECT @letter b) a
join master..spt_values v on v.number < len(a.b)
WHERE v.type = 'P'

SELECT @num = SUM(CASE WHEN RowNumber = 0 THEN Number ELSE Number * (RowNumber * 26) END) + 1
FROM @Number
WHERE Number > 0

SELECT
        Coalesce((SELECT Char(97 + (@num - 475255) / 456976 % 26) WHERE @num >= 475255), '')
      + Coalesce((SELECT Char(97 + (@num - 18279) / 17576 % 26) WHERE @num >= 18279), '')
      + Coalesce((SELECT Char(97 + (@num - 703) / 676 % 26) WHERE @num >= 703), '')
      + Coalesce((SELECT Char(97 + (@num - 27) / 26 % 26) WHERE @num >= 27), '')
      + (SELECT Char(97 + (@num - 1) % 26)) AS LetterCode

Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
159.20.31.*



+3 Profil

icon Re: AlphaNumeric Sequence02.08.2016. u 07:48 - pre 93 meseci
Na onovu ovog koda dobijem sledece

za 25 AAAZ
za 26 AABA

Nemogu da se snadjem kako da pretvorim karaktere u broj...kako za AAAZ da dobijem 25? Sve te formule sam razglledo i brojke koje dobijem se nepoklapaju. Ako moze bilo kakva pomoc

Code:

declare @id int
SET @ID = 25
select
     char(@id / power(26,3) % 26 + 65) + 
     char(@id / power(26,2) % 26 + 65) + 
     char(@id / 26 % 26 + 65) + 
     char(@id % 26 + 65) 



Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
159.20.31.*



+3 Profil

icon Re: AlphaNumeric Sequence02.08.2016. u 12:56 - pre 93 meseci
Vise izgubljenog vremena nego sto treba :D

Code:

DECLARE @strng varchar(max) = 'bzz';
DECLARE @strngOut varchar(max) = '';
DECLARE @incremented bit = 1;
SET @strng = REVERSE(@strng);
 
SELECT @strngOut = @strngOut + CHAR(CASE WHEN n.Number + @incremented = 26 THEN 0 ELSE n.Number 
+ @incremented END + 97), @incremented = CASE WHEN n.Number + @incremented = 26 THEN 1 ELSE 0 END
FROM (
       SELECT (CAST(ASCII(substring(@strng, v.number+1, 1)) AS int) - 97) AS Number
       FROM master..spt_values v
       WHERE v.type = 'P' AND v.number < len(@strng)
) n;
 
IF (@incremented = 1)
BEGIN
       SET @strngOut = @strngOut + 'a';
END
 
SELECT REVERSE(@strngOut)





[Ovu poruku je menjao ik0 dana 02.08.2016. u 22:21 GMT+1]
Kude tumbe i tri bandere
 
Odgovor na temu

[es] :: MS SQL :: AlphaNumeric Sequence

[ Pregleda: 2585 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.