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

Calculate Barcode Check Digit koristeći SQL upit

[es] :: MS SQL :: Calculate Barcode Check Digit koristeći SQL upit

[ Pregleda: 3158 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Calculate Barcode Check Digit koristeći SQL upit26.11.2007. u 09:15 - pre 169 meseci
Poštovani !

Da se slučajno neko već nije susreo sa sql upitom koje kalkuliše check cifru za barkodove tipa EAN13 ili EAN8.




S poštovanjem
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit26.11.2007. u 09:57 - pre 169 meseci
Tesko ces to moci sa upitom, mozes jedino sa stored procedurom ili UDF-om.
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.simex-su.co.yu.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit26.11.2007. u 11:07 - pre 169 meseci
Evo nešto što radi pod PostgreSQL-om, a trebalo bi da radi i pod MS SQL-om.
Code:
CREATE TABLE artikli (
  ean_kod VARCHAR(13) NOT NULL,
  opis VARCHAR(5) NOT NULL
);

CREATE VIEW brojevi_od_1_do_13
  (broj)
AS
SELECT 1
 UNION ALL
SELECT 2
 UNION ALL
SELECT 3
 UNION ALL
SELECT 4
 UNION ALL
SELECT 5
 UNION ALL
SELECT 6
 UNION ALL
SELECT 7
 UNION ALL
SELECT 8
 UNION ALL
SELECT 9
 UNION ALL
SELECT 10
 UNION ALL
SELECT 11
 UNION ALL
SELECT 12
 UNION ALL
SELECT 13;

INSERT INTO artikli (ean_kod, opis)
  VALUES ('8600102938083', 'dobar');
INSERT INTO artikli (ean_kod, opis)
  VALUES ('1234567890123', 'los');
INSERT INTO artikli (ean_kod, opis)
  VALUES ('86003148', 'dobar');

SELECT a.ean_kod,
       a.opis,
       (SELECT SUM(cds.cd) % 10 = 0
          FROM (SELECT CAST(substring(a.ean_kod from b.broj for 1) AS SMALLINT) AS cd
                  FROM brojevi_od_1_do_13 AS b
                 WHERE (length(a.ean_kod) - b.broj) % 2 = 0
                   AND length(a.ean_kod) >= b.broj
                 UNION ALL
                SELECT 3 * CAST(substring(a.ean_kod from b.broj for 1) AS SMALLINT) AS cd
                  FROM brojevi_od_1_do_13 AS b
                 WHERE (length(a.ean_kod) - b.broj) % 2 = 1
                   AND length(a.ean_kod) >= b.broj
               ) AS cds
       ) AS ispravan
  FROM artikli AS a;

Ako postoji funkcija koja generiše skup rednih brojeva (znam da u PostgreSQL-u postoji), onda VIEW nije potreban, a upit se može skratiti da izgleda pristojno.
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit26.11.2007. u 11:43 - pre 169 meseci
@chachka

Hvala za skriptu ali nažalost nisam baš familijar sa PostgreSQL TSQL-om

MS Sql mi neće izvršiti skriptu a nejsanm mi je onaj dio koda sa "% 10" i "% 2 = "
koja je to funkcija ili operater u MS Sql-u

Hvala Unaprijed


S poštovanjem
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.simex-su.co.yu.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit26.11.2007. u 12:11 - pre 169 meseci
Ovde se ne radi o TSQL-u ili njegovoj analogiji, već o SQL-u i to standardnom. Skripta ti ne prolazi zato što znakove ';' treba zameniti sa 'GO' u slučaju MSSQL-a. Znak '%' je ostatak pri celobrojnom deljenju.
17 % 10 = 7
12 % 2 = 0
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

BezPanike

Član broj: 128571
Poruke: 74



+2 Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit26.11.2007. u 18:11 - pre 169 meseci
T-SQL funkcija računa 13. cifru:


Code:
CREATE FUNCTION CreateChecksum 
(
    @ean_kod varchar(12)
)
RETURNS char(1)
AS
BEGIN
    DECLARE @Result char(1)

    DECLARE @charPos int
    DECLARE @csumTotal int

    SET @charPos = len(@ean_kod) 
    SET @csumTotal = 0

    WHILE @charPos > 0
    BEGIN
        IF NOT(@charPos % 2 = 0)
            SET @csumTotal = @csumTotal + CAST(SUBSTRING(@ean_kod, @charPos, 1) AS int)
        ELSE
            SET @csumTotal = @csumTotal + 3 * CAST(SUBSTRING(@ean_kod, @charPos, 1) AS int)

        SET @charPos = @charPos -1
        CONTINUE
    END

    DECLARE @remainder int

    SET @remainder = 10 - @csumTotal % 10
    SET @remainder = @remainder % 10

    SET @Result = CAST(@remainder AS int)

    RETURN @Result

END
GO
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.ADSL.neobee.net.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit26.11.2007. u 18:45 - pre 169 meseci
@BezPanike: Cini mi se da procedura ne daje ispravan rezultat za osmocifrene kodove. Nije dovoljno samo proveravati da li je pozicija cifre parna ili neparna, jer se tezina cifre racuna s desna na levo, pa onda tezina cifre zavisi i od duzine koda. U mom upitu je i duzina koda uzeta u obzir.
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

BezPanike

Član broj: 128571
Poruke: 74



+2 Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit27.11.2007. u 08:09 - pre 169 meseci
U pravu si, ne radi za EAN-8, ali ja i napisah da računa 13. cifru.

Uz manje modifikacije može da radi i za EAN-8. Recimo, posebna funkcija u kojoj se izbaci ono NOT u IF petlji ili malo logike da bi se dobila jedna funkcija i za EAN-8 i EAN-13.
Ne volim rešenja sa pomoćnim tabelama koje sadrže besmislene sekvencijalne brojeve (ili sve datume za par vekova)!

Nadam se da smo pomogli autoru teme :)
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
62.108.108.*

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit27.11.2007. u 08:35 - pre 169 meseci
Onaj VIEW brojevi_od_1_do_13 je samo jedan od nacina kako se moze dobiti tabela sa rednim brojevima. U PostgreSQL-u postoji funkcija generate_series(1, 13) koja radi to isto. Mozda slicna funkcija postoji i u MSSQL-u?
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

adopilot
Admir Hodžić
It menager
Sarajevo BiH

Član broj: 123492
Poruke: 134
217.199.133.*

Sajt: nemam ja to


Profil

icon Re: Calculate Barcode Check Digit koristeći SQL upit27.11.2007. u 09:12 - pre 169 meseci
Naravno da ste pomogli i to puno
Bog da nagradi ES i naravno Vas
Voljne programere koji uvijek imate riješenje za pojedini problem

Po nekim teorijama 20% je main programera koji izmišljaju toplu vodu i bave se core stvarima

a nas 80% ostaje koji koristimo onda to u obliku ASP.net-ova ili kojekakvih AJAXA pa samim tim i ovakvih skripti koje samo prepišemo
i odaradimo pojedine zadatke

Velika Hvala
Admir

S poštovanjem
 
Odgovor na temu

[es] :: MS SQL :: Calculate Barcode Check Digit koristeći SQL upit

[ Pregleda: 3158 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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