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

Mozgalica za Maj 2012

[es] :: Baze podataka :: Mozgalica za Maj 2012

[ Pregleda: 2024 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Mozgalica za Maj 201224.05.2012. u 21:26 - pre 144 meseci
Imam u tablei kolonu Ime, varchar (15) NOT NULL

NOT NULL mi nije dovopljan uslov. Ne zelim da cuvam:
a) prazan string
b) string koji se sastoji samo od znakova razmaka

Napisati CHECK CONSTRAINT, ili vise njih, koji sprecavaju da se unese a) prazan string i b) string koji se sastoji samo od znakova razmaka.

Izvolite
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Re: Mozgalica za Maj 201224.05.2012. u 21:38 - pre 144 meseci
Test okruzenje => SQL SERVER 2008 R2

Code (sql):

CREATE TABLE test(
Ime VARCHAR (15) NOT NULL
CHECK (LEN(Ime) != 0)
)

-- test cases

INSERT INTO test VALUES ('');
INSERT INTO test VALUES ('    ');
INSERT INTO test VALUES ('x');
INSERT INTO test VALUES ('    x');
INSERT INTO test VALUES (' x   x');

 



Deluje mi suvise prosto za mozgalicu...
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica za Maj 201224.05.2012. u 22:02 - pre 144 meseci
Igorovo resenje se prihvata, cestitam.

Ima li jos neko resenje, nesto recimo sa LIKE, ili nesto sto ne upotrebljava funkcije? Cisto da vidimo sta sve moze da se uradi.

Znam da Joe Celko, covek koji je napisao neke od najboljih knjiga o SQL, za ovakve slucajeve nudi ovo:
Code:

CHECK Ime NOT IN ('',' ','  ', '   ','    ','     ','      ','       ','        ','         ','          ','           ','           ','            ','             ','              ','               ')


Sto se tice tezine, i ja sam mislio da je pitanje lako, ali kad sam pitao moje programere ovde da to rese, bar pola nije imalo pojma.

 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica za Maj 201224.05.2012. u 22:16 - pre 144 meseci
Kad vec spomenusmo programere, evo jednog odgovora:
Citat:
I wrote a function to handle this. I want other developers to be able to reuse the logic without having to write the if/then statements for the hundreds of fields I need to apply this to.

Code:

CREATE FUNCTION convertEmptyStringToNull(@FieldName varchar(100))
RETURNS varchar(100)AS
BEGIN   
DECLARE @convertEmptyStringToNull varchar(100)   
 IF LEN(LTRIM(@FieldName)) > 0        
Set @convertEmptyStringToNull = @FieldName    
ELSE        Set @convertEmptyStringToNull = NULL   
 RETURN(@convertEmptyStringToNull)
END


Ko razume, shvatice... Ja nisma razumeo zasto treba korisnicak funkcija, i zasto da pretvara prazan string u NULL, ali eto, neko je seo i napisao ovakav kod. Ne prihvata se kao resenje jer je nebulozno.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Mozgalica za Maj 201224.05.2012. u 22:22 - pre 144 meseci
Odmah prigivor

Za Oracle je prazan string NULL, tako da NOT NULL klauzula uključuje i prazne stringove.

Evo sesije:



Evo i komande za ograničenje da su zabranjeni prazni stringovi
Code (sql):

ALTER TABLE tablei ADD CONSTRAINT tablei_con
CHECK (REPLACE(ime, ' ', '') IS NOT NULL);
 
Prikačeni fajlovi
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica za Maj 201225.05.2012. u 15:20 - pre 144 meseci
Moze i bez funkcija, barem u MS SQL 2000/2005
Code:

IF Object_ID('test') IS NOT NULL DROP TABLE test
;
CREATE TABLE test( 
Broj int identity
, Ime varchar (15) NOT NULL
CONSTRAINT ck_NoOnlySpaces CHECK (IME  like '%[^ ]%')
)

-- test cases
INSERT INTO test (Ime)  VALUES ('');    -- Ne prolazi
INSERT INTO test (Ime)   VALUES ('    ');    -- Ne prolazi

-- Prolazi
INSERT INTO test (Ime)   VALUES ('x');            -- OK
INSERT INTO test (Ime)   VALUES ('    x');        -- OK
INSERT INTO test (Ime)   VALUES (' x   x');        -- OK
INSERT INTO test (Ime)   VALUES ('x   x     ');    -- OK
;

SELECT
Broj, '>'+Ime+'<'
FROM test
;

       Broj 
----------- -----------------
          2 >x<
          3 >    x<
          4 > x   x<
          5 >x   x     <

(4 row(s) affected)


Treba ukucati u Google 'SQL Pattren matching'

http://manuals.sybase.com/onli...ric__BookTextView/6605;pt=7889

IME like '%[^ ]%' znaci 'mora da ima bar neki karakter koji nije space' i na testitanju se pokazalo da radi i za zero length string.

:-)
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Re: Mozgalica za Maj 201225.05.2012. u 20:15 - pre 144 meseci
Mala varijacija

Code (sql):

CREATE TABLE test(
 Ime VARCHAR (15) NOT NULL
CHECK (LTRIM(Ime) != '')
)
 


Postoji pitanje brzine upisa u tabelu sa proverom koja je resena preko regularnog izraza. Pogotovo kod tabela kod kojih postoji dosta upisa.
 
Odgovor na temu

[es] :: Baze podataka :: Mozgalica za Maj 2012

[ Pregleda: 2024 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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