mboost-dp1

SQL BETWEEN spørgsmål


Gå til bund
Gravatar #1 - squad2nd
5. mar. 2009 14:35
Hej!

Jeg har et spørgsmål ang. keywordet 'BETWEEN' i SQL.
Her er hvordan det simple table er opbygget samt inserts:

CREATE TABLE person
(
id integer
name varchar(20)
);



INSERT INTO person VALUES
(
1, 'anders'
);

INSERT INTO person VALUES
(
2, 'mikkel'
);

INSERT INTO person VALUES
(
3, 'nina'
);




SELECT * FROM person WHERE ( id BETWEEN 1 AND 3);
Returnerer Id: 1, 2, 3 - som forventet.

SELECT * FROM person WHERE ( name BETWEEN 'a' AND 'n');
Returnerer Id: 1, 2.

Hvorfor bliver det sidste ID ikke hentet ind når man søger via char's, når BETWEEN skulle forestille at være 'inclusive' ligesom integer?
Gravatar #2 - myplacedk
5. mar. 2009 14:45
"n" er mindre end "nina".

a
anders
b
c
...
m
mikkel
n
nina
o

Du skal nok vælge første bogstav ud, og kigge på det, i stedet for hele navnet.

substring(name, 0, 1) BETWEEN 'a' AND 'n'

(eller hvilken syntax der nu virker i den SQL-variant du benytter.)
Gravatar #3 - squad2nd
5. mar. 2009 15:08
#2 Tak for dit svar, jeg sætter pris på det.

Grunden til jeg spørger, er fordi at jeg er ved at opfriske mit SQL.
Jeg følger en bog hvor følgende SQL query bliver beskrevet:


The next condition requires that film's name must begin with a letter in the range of P to T:

WHERE ( YearReleased NOT BETWEEN 1960 AND 1969 )
AND
( FilmName BETWEEN 'P' AND 'T');


Integer-sammenligningen virker, men eksemplet med 'P' / 'T' er da løgnagtigt. Bogen skulle forestille sig at præsentere 'standard SQL'.

Jeg har prøvet eksemplet på både PostgreSQL (som er min primære db) samt MySQL. Begge kommer med samme svar.
Gravatar #4 - fidomuh
5. mar. 2009 15:50
#3

"Standard SQL" = "MSSQL".

Jeg har lige proevet paa vores MSSQL 2005, og det ser ud til at virke som beskrevet i bogen.
Altsaa at den selv laver en substring. :)
Gravatar #5 - squad2nd
5. mar. 2009 17:38
#4

Altsaa at den selv laver en substring. :)


Hvordan laver man så en query i MSSQL der udgør det resultat som MySQL/PostgreSQL spytter ud? Altså den tjekker pr. bogstav?
Gravatar #6 - arne_v
5. mar. 2009 17:41
#4

Fidomuh patch ??

1> SELECT @@VERSION
2> GO









-------------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------

------------------------------------------------------------------------

-----
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
C
opyright (c) 1988-2005 Microsoft Corporation
Express Edition on Windows
NT 5.1 (Build 2600: Service Pack 3)





(1 row affected)
1>
2> CREATE TABLE test (txt VARCHAR(25) NOT NULL PRIMARY KEY)
3> GO
1> INSERT INTO test VALUES('Alfa')
2> GO
(1 row affected)
1> INSERT INTO test VALUES('Beta')
2> GO
(1 row affected)
1> INSERT INTO test VALUES('Charlie')
2> GO
(1 row affected)
1> INSERT INTO test VALUES('Delta')
2> GO
(1 row affected)
1>
2> SELECT * FROM test WHERE txt BETWEEN 'B' AND 'C'
3> GO
txt
-------------------------
Beta

(1 row affected)
1> SELECT * FROM test WHERE txt BETWEEN 'B' AND 'D'
2> GO
txt
-------------------------
Beta
Charlie

(2 rows affected)
Gravatar #7 - fidomuh
5. mar. 2009 18:45
#6

.. Teh foo.. Jeg proever lige at patche vores system :D
Gravatar #8 - squad2nd
5. mar. 2009 19:51
#7

Skal SQL Server 2005 PATCHES til at overholde SQL standarder? :-P
Gravatar #9 - arne_v
5. mar. 2009 20:00
#8

Nok snarere omvendt.
Gravatar #10 - fidomuh
5. mar. 2009 20:13
#9

Okay, nu virker det som det skal :D
Weird shit.. Maa vaere en bad patch der har vaeret paa..

Men det er saa heller ikke blevet patchet i over 1 aar lagde jeg lige maerke til..
Gravatar #11 - squad2nd
5. mar. 2009 21:48
#10

Jeg skal lige være med her. Så jeres system returnerede ikke det korrekte resultat pga. manglende opdatering?
Gravatar #12 - fidomuh
6. mar. 2009 09:54
#11

Umiddelbart.
Den returnerede altsaa A, B, C, Charlie med en BETWEEN 'A' AND 'C'.

I have no idea why.
Efter patch goer den det ikke. :)
Gravatar #13 - arne_v
7. mar. 2009 18:17
#11

Min var en 2005 installeret 10 minutter før testen uden nogen som helst patche eller andet.

Jeg tror godt du kan regne med at hvis du installerer en SQLServer, så vil den gøre det rigtig (hvilket så er forskelligt fra din bog).
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login