/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Sortering viker ikke efter hensigten
Fra : Aagaard


Dato : 06-02-09 23:05

Vores lille haveforening har lavet et medlemsarkiv i MySql.
Når vi vil sortere på have nummer, så virker det ikke som vi gerne vil.
Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
MySql: `Havenr` varchar(5) default NULL,
Havenr er fortløbende: 1, 2, 3 ... osv.
Kan vi gøre noget for at få sorteringen fortløbende?

--
Aagaard



 
 
Arne Vajhøj (06-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 06-02-09 23:20

Aagaard wrote:
> Vores lille haveforening har lavet et medlemsarkiv i MySql.
> Når vi vil sortere på have nummer, så virker det ikke som vi gerne vil.
> Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
> Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
> MySql: `Havenr` varchar(5) default NULL,
> Havenr er fortløbende: 1, 2, 3 ... osv.
> Kan vi gøre noget for at få sorteringen fortløbende?

Vælg korrekt data type for kolonnen.

INT fremfor VARCHAR(5)

Arne

Arne Vajhøj (06-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 06-02-09 23:21

Arne Vajhøj wrote:
> Aagaard wrote:
>> Vores lille haveforening har lavet et medlemsarkiv i MySql.
>> Når vi vil sortere på have nummer, så virker det ikke som vi gerne vil.
>> Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
>> Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
>> MySql: `Havenr` varchar(5) default NULL,
>> Havenr er fortløbende: 1, 2, 3 ... osv.
>> Kan vi gøre noget for at få sorteringen fortløbende?
>
> Vælg korrekt data type for kolonnen.
>
> INT fremfor VARCHAR(5)

Hvis du ikke har mulighed for at ændre tabel struturen, så
er der det grimme hack:

.... ORDER BY CAST(havenr AS INT)

Arne

Aagaard (06-02-2009)
Kommentar
Fra : Aagaard


Dato : 06-02-09 23:42

> Hvis du ikke har mulighed for at ændre tabel struturen, så
> er der det grimme hack:
>
> ... ORDER BY CAST(havenr AS INT)
>
Det kunne jeg via PhpMyAdmin, så var det ok, men gemmer lige kommandoen,
hvis der skulle blive brug for den senere.

--
Aagaard



Martin (07-02-2009)
Kommentar
Fra : Martin


Dato : 07-02-09 16:13

Arne Vajhøj wrote:
> Arne Vajhøj wrote:
>> Aagaard wrote:
>>> Vores lille haveforening har lavet et medlemsarkiv i MySql.
>>> Når vi vil sortere på have nummer, så virker det ikke som vi gerne vil.
>>> Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
>>> Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
>>> MySql: `Havenr` varchar(5) default NULL,
>>> Havenr er fortløbende: 1, 2, 3 ... osv.
>>> Kan vi gøre noget for at få sorteringen fortløbende?
>>
>> Vælg korrekt data type for kolonnen.
>>
>> INT fremfor VARCHAR(5)
>
> Hvis du ikke har mulighed for at ændre tabel struturen, så
> er der det grimme hack:
>
> ... ORDER BY CAST(havenr AS INT)

Man kan også

ORDER BY havenr * 1
Denne vil også virke hvis man også har bogstaver.

Arne Vajhøj (07-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 07-02-09 17:10

Martin wrote:
> Arne Vajhøj wrote:
>> Arne Vajhøj wrote:
>>> Aagaard wrote:
>>>> Vores lille haveforening har lavet et medlemsarkiv i MySql.
>>>> Når vi vil sortere på have nummer, så virker det ikke som vi gerne vil.
>>>> Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
>>>> Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
>>>> MySql: `Havenr` varchar(5) default NULL,
>>>> Havenr er fortløbende: 1, 2, 3 ... osv.
>>>> Kan vi gøre noget for at få sorteringen fortløbende?
>>> Vælg korrekt data type for kolonnen.
>>>
>>> INT fremfor VARCHAR(5)
>> Hvis du ikke har mulighed for at ændre tabel struturen, så
>> er der det grimme hack:
>>
>> ... ORDER BY CAST(havenr AS INT)
>
> Man kan også
>
> ORDER BY havenr * 1
> Denne vil også virke hvis man også har bogstaver.

Det virker i MySQL.

Men jeg betragter det nok mere som en bug end som en feature.

Og jeg synes absolut ikke at man skal skrive den slags kode.

Arne

Lars Kongshøj (07-02-2009)
Kommentar
Fra : Lars Kongshøj


Dato : 07-02-09 17:44

Martin skrev:
> Man kan også
> ORDER BY havenr * 1
> Denne vil også virke hvis man også har bogstaver.

Virke? Hvis ens RDBMS virker, vil det rejse en exception - ellers vil
det virke efter GIGO-princippet og blive sorteret efter principper, som
ikke er alment accepterede.

/Lars

Arne Vajhøj (07-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 07-02-09 17:52

Lars Kongshøj wrote:
> Martin skrev:
>> Man kan også
>> ORDER BY havenr * 1
>> Denne vil også virke hvis man også har bogstaver.
>
> Virke? Hvis ens RDBMS virker, vil det rejse en exception - ellers vil
> det virke efter GIGO-princippet og blive sorteret efter principper, som
> ikke er alment accepterede.

Spørgsmålet angav at det er MySQL.

Og MySQL har et meget afslappet forhold til tal versus tekst.

Det giver ikke exception og jeg tvivler ikke på at det sorterer fint.

Men man bør aldrig skrive den slags obfuskeret kode. Og på
et eller andet tidspunkt indfører MySQL vel en SQL mode, hvor
det giver fejl.

Arne

Arne Vajhøj (07-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 07-02-09 17:54

Arne Vajhøj wrote:
> Lars Kongshøj wrote:
>> Martin skrev:
>>> Man kan også
>>> ORDER BY havenr * 1
>>> Denne vil også virke hvis man også har bogstaver.
>>
>> Virke? Hvis ens RDBMS virker, vil det rejse en exception - ellers vil
>> det virke efter GIGO-princippet og blive sorteret efter principper,
>> som ikke er alment accepterede.
>
> Spørgsmålet angav at det er MySQL.
>
> Og MySQL har et meget afslappet forhold til tal versus tekst.
>
> Det giver ikke exception og jeg tvivler ikke på at det sorterer fint.
>
> Men man bør aldrig skrive den slags obfuskeret kode. Og på
> et eller andet tidspunkt indfører MySQL vel en SQL mode, hvor
> det giver fejl.

Se f.eks. den her rædsel:

mysql> select ('4'+'abc')/'2';
+-----------------+
| ('4'+'abc')/'2' |
+-----------------+
| 2 |
+-----------------+
1 row in set (0.02 sec)

Arne

Lars Kongshøj (07-02-2009)
Kommentar
Fra : Lars Kongshøj


Dato : 07-02-09 21:05

Arne Vajhøj skrev:
> Arne Vajhøj wrote:
>> Lars Kongshøj wrote:
>>> Martin skrev:
>>>> Man kan også
>>>> ORDER BY havenr * 1
>>>> Denne vil også virke hvis man også har bogstaver.
>>>
>>> Virke? Hvis ens RDBMS virker, vil det rejse en exception - ellers vil
>>> det virke efter GIGO-princippet og blive sorteret efter principper,
>>> som ikke er alment accepterede.
>>
>> Spørgsmålet angav at det er MySQL.
>>
>> Og MySQL har et meget afslappet forhold til tal versus tekst.
>>
>> Det giver ikke exception og jeg tvivler ikke på at det sorterer fint.
>>
>> Men man bør aldrig skrive den slags obfuskeret kode. Og på
>> et eller andet tidspunkt indfører MySQL vel en SQL mode, hvor
>> det giver fejl.
>
> Se f.eks. den her rædsel:
>
> mysql> select ('4'+'abc')/'2';
> +-----------------+
> | ('4'+'abc')/'2' |
> +-----------------+
> | 2 |
> +-----------------+
> 1 row in set (0.02 sec)

Ja, det er præcist en rædsel - undskyld mange gange at jeg kom til at
formulere mig for diplomatisk.

Hvordan kan man dog finde på at implementere en så meningsløs semantik?

/Lars

Arne Vajhøj (07-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 07-02-09 21:33

Lars Kongshøj wrote:
> Arne Vajhøj skrev:
>> Arne Vajhøj wrote:
>>> Lars Kongshøj wrote:
>>>> Martin skrev:
>>>>> Man kan også
>>>>> ORDER BY havenr * 1
>>>>> Denne vil også virke hvis man også har bogstaver.
>>>>
>>>> Virke? Hvis ens RDBMS virker, vil det rejse en exception - ellers
>>>> vil det virke efter GIGO-princippet og blive sorteret efter
>>>> principper, som ikke er alment accepterede.
>>>
>>> Spørgsmålet angav at det er MySQL.
>>>
>>> Og MySQL har et meget afslappet forhold til tal versus tekst.
>>>
>>> Det giver ikke exception og jeg tvivler ikke på at det sorterer fint.
>>>
>>> Men man bør aldrig skrive den slags obfuskeret kode. Og på
>>> et eller andet tidspunkt indfører MySQL vel en SQL mode, hvor
>>> det giver fejl.
>>
>> Se f.eks. den her rædsel:
>>
>> mysql> select ('4'+'abc')/'2';
>> +-----------------+
>> | ('4'+'abc')/'2' |
>> +-----------------+
>> | 2 |
>> +-----------------+
>> 1 row in set (0.02 sec)
>
> Ja, det er præcist en rædsel - undskyld mange gange at jeg kom til at
> formulere mig for diplomatisk.
>
> Hvordan kan man dog finde på at implementere en så meningsløs semantik?

For at gøre det nemt for den kategori af hobby udviklere som
ikke går op i det der med typer.

Arne

Lars Kongshøj (07-02-2009)
Kommentar
Fra : Lars Kongshøj


Dato : 07-02-09 23:23

Arne Vajhøj skrev:
> For at gøre det nemt for den kategori af hobby udviklere som
> ikke går op i det der med typer.

Jeg har aldrig forstået at nogle programmører mener at ukorrekte inddata
skal give tilfædige uddate i stedet for en fejlmeddelelse.

/Lars

Arne Vajhøj (07-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 07-02-09 23:34

Lars Kongshøj wrote:
> Arne Vajhøj skrev:
>> For at gøre det nemt for den kategori af hobby udviklere som
>> ikke går op i det der med typer.
>
> Jeg har aldrig forstået at nogle programmører mener at ukorrekte inddata
> skal give tilfædige uddate i stedet for en fejlmeddelelse.

Der er ikke noget tilfældigt i det og hvis MySQL har dokumenteret det
et eller andet sted, så er det heller ikke ukorrekte inddata.

Det er meget lidt type sikkert.

Jeg kan ikke lide det.

Men der er meget populære programmerings sprog som sætter en
ære i ikke at have strenge type check.

Arne

Lars Kongshøj (08-02-2009)
Kommentar
Fra : Lars Kongshøj


Dato : 08-02-09 12:47

Arne Vajhøj skrev:
> Lars Kongshøj wrote:
>> Jeg har aldrig forstået at nogle programmører mener at ukorrekte
>> inddata skal give tilfædige uddate i stedet for en fejlmeddelelse.
> Der er ikke noget tilfældigt i det og hvis MySQL har dokumenteret det
> et eller andet sted, så er det heller ikke ukorrekte inddata.

Man kan fx specificere at den numeriske værdi af "abc" er
('c'-'0')*100+('b'-'0')*10+('c'-'0').

Spørgsmålet er om nogen kan bruge den definition til noget, bortset fra
programmører, der designer efter "garbage in garbage out"-princippet.

I hvert fald mister man muligheden for at få en exception, ved forsøg på
at konvertere noget, der ikke efter gængse normer er et tal.

> Men der er meget populære programmerings sprog som sætter en
> ære i ikke at have strenge type check.

Ja, men C er designet som et maskinnært sprog. SQL er beregnet til at
løse databaseopgaver.

/Lars

Arne Vajhøj (17-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 17-02-09 04:47

Lars Kongshøj wrote:
> Arne Vajhøj skrev:
>> Lars Kongshøj wrote:
>>> Jeg har aldrig forstået at nogle programmører mener at ukorrekte
>>> inddata skal give tilfædige uddate i stedet for en fejlmeddelelse.
>> Der er ikke noget tilfældigt i det og hvis MySQL har dokumenteret det
>> et eller andet sted, så er det heller ikke ukorrekte inddata.
>
> Man kan fx specificere at den numeriske værdi af "abc" er
> ('c'-'0')*100+('b'-'0')*10+('c'-'0').
>
> Spørgsmålet er om nogen kan bruge den definition til noget, bortset fra
> programmører, der designer efter "garbage in garbage out"-princippet.

Alle programmører der sætter sig ind i hvordan det de udvikler i
fungerer kan vel bruge det.

> I hvert fald mister man muligheden for at få en exception, ved forsøg på
> at konvertere noget, der ikke efter gængse normer er et tal.

Hvilket formentligt er grunden til at selvom de kan bruge det, så
vil de ikke være vildt glade for det.

>> Men der er meget populære programmerings sprog som sætter en
>> ære i ikke at have strenge type check.
>
> Ja, men C er designet som et maskinnært sprog. SQL er beregnet til at
> løse databaseopgaver.

Det var ikke C jeg tænkte på - C har nogenlunde type check (mindre end
Ada, men langt bedre end PHP, VBS etc.).

Arne

Leif Neland (17-02-2009)
Kommentar
Fra : Leif Neland


Dato : 17-02-09 12:06

Arne Vajhøj skrev:
> Arne Vajhøj wrote:
>> Aagaard wrote:
>>> Vores lille haveforening har lavet et medlemsarkiv i MySql.
>>> Når vi vil sortere på have nummer, så virker det ikke som vi gerne vil.
>>> Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
>>> Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
>>> MySql: `Havenr` varchar(5) default NULL,
>>> Havenr er fortløbende: 1, 2, 3 ... osv.
>>> Kan vi gøre noget for at få sorteringen fortløbende?
>>
>> Vælg korrekt data type for kolonnen.
>>
>> INT fremfor VARCHAR(5)
>
> Hvis du ikke har mulighed for at ændre tabel struturen, så
> er der det grimme hack:
>
> ... ORDER BY CAST(havenr AS INT)
>

Er det et grimt hack?
Er CAST ikke netop defineret til dette?
Måske ville det lyde bedre, hvis man brugte intval eller parseint.

I øvrigt, så ville jeg bruge "ORDER BY CAST(havenr AS INT), havenr"
for at få sorteret "1, 1A, 1B, 2, 11"

Leif

Arne Vajhøj (19-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 19-02-09 04:32

Leif Neland wrote:
> Arne Vajhøj skrev:
>> Arne Vajhøj wrote:
>>> Aagaard wrote:
>>>> Vores lille haveforening har lavet et medlemsarkiv i MySql.
>>>> Når vi vil sortere på have nummer, så virker det ikke som vi gerne vil.
>>>> Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
>>>> Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
>>>> MySql: `Havenr` varchar(5) default NULL,
>>>> Havenr er fortløbende: 1, 2, 3 ... osv.
>>>> Kan vi gøre noget for at få sorteringen fortløbende?
>>>
>>> Vælg korrekt data type for kolonnen.
>>>
>>> INT fremfor VARCHAR(5)
>>
>> Hvis du ikke har mulighed for at ændre tabel struturen, så
>> er der det grimme hack:
>>
>> ... ORDER BY CAST(havenr AS INT)
>>
>
> Er det et grimt hack?
> Er CAST ikke netop defineret til dette?

CAST er defineret til at skifte data type.

Men i dette tilfælde er CAST en workaround - den rigtige løsning
er at give feltet den data type som data reelt er.

> Måske ville det lyde bedre, hvis man brugte intval eller parseint.

Navnet er fint nok.

> I øvrigt, så ville jeg bruge "ORDER BY CAST(havenr AS INT), havenr"
> for at få sorteret "1, 1A, 1B, 2, 11"

Jeg ville kvie mig meget ved at skrive en sådan SQL sætning.

Den vil give fejl i de fleste andre databaser end lige netop
MySQL og matcher heller ikke standarden for parsning i programmerings
sprog.

Men ja - den virker.

Arne

Leif Neland (20-02-2009)
Kommentar
Fra : Leif Neland


Dato : 20-02-09 18:16

Arne Vajhøj skrev:
> Leif Neland wrote:
>> Arne Vajhøj skrev:
>>> Arne Vajhøj wrote:
>>>> Aagaard wrote:
>>>>> Vores lille haveforening har lavet et medlemsarkiv i MySql.
>>>>> Når vi vil sortere på have nummer, så virker det ikke som vi gerne
>>>>> vil.
>>>>> Rækkefølgen bliver: 1, 10, 11, 12 ..19, 2, 20, 21 ... osv.
>>>>> Sql: $sql_query = "SELECT * FROM medlemmer ORDER BY Havenr";
>>>>> MySql: `Havenr` varchar(5) default NULL,
>>>>> Havenr er fortløbende: 1, 2, 3 ... osv.
>>>>> Kan vi gøre noget for at få sorteringen fortløbende?
>>>>
>>>> Vælg korrekt data type for kolonnen.
>>>>
>>>> INT fremfor VARCHAR(5)
>>>
>>> Hvis du ikke har mulighed for at ændre tabel struturen, så
>>> er der det grimme hack:
>>>
>>> ... ORDER BY CAST(havenr AS INT)
>>>
>>
>> Er det et grimt hack?
>> Er CAST ikke netop defineret til dette?
>
> CAST er defineret til at skifte data type.
>
> Men i dette tilfælde er CAST en workaround - den rigtige løsning
> er at give feltet den data type som data reelt er.

Men et husnummer er ikke et tal, det er en streng.
Det er ikke smart, hvis du ikke kan have husnummer 1A

Så må man splitte husnummeret op i taldel og bogstavdel.
Hvis det er en adresse, så er der nogen steder der er separate felter
til gade, nr, bogstav, etage og dør.

Ellers kan man Padde med mellemrum når husnummeret gemmes i db, så
taldelen altid slutter i f.ex. 4. position; det antages at der ikke er
husnumre større end 9999. Altså
" 1"
" 1A"
" 7"
" 10"
" 10B"

Men det kan jo være svært at styre, hvis man ikke har 110% styr på at
det sker i hver eneste sted, data bliver gemt fra.

>
>> Måske ville det lyde bedre, hvis man brugte intval eller parseint.
>
> Navnet er fint nok.
>
>> I øvrigt, så ville jeg bruge "ORDER BY CAST(havenr AS INT), havenr"
>> for at få sorteret "1, 1A, 1B, 2, 11"
>
> Jeg ville kvie mig meget ved at skrive en sådan SQL sætning.
>
> Den vil give fejl i de fleste andre databaser end lige netop
> MySQL og matcher heller ikke standarden for parsning i programmerings
> sprog.
>
> Men ja - den virker.

Desværre, den virker end ikke i MySql (iflg manualen).
Man mangler virkelig en intval-funktion...

Hvis man vil lave det i mysql, kan man skrive "ORDER BY 0+havenr,havenr"
for at få sorteret med bogstaver som 1, 1A, 2, 11

Leif

Maria Frederiksen (08-03-2009)
Kommentar
Fra : Maria Frederiksen


Dato : 08-03-09 12:03


>> Er det et grimt hack?
>> Er CAST ikke netop defineret til dette?
>
> CAST er defineret til at skifte data type.
>
> Men i dette tilfælde er CAST en workaround - den rigtige løsning
> er at give feltet den data type som data reelt er.


Her har jeg brug for hjælp. Vi har en kolonne, med varenumre, som både er
tal og bogstaver. Varenumre skal sorteres 1-2-3-4...10-11 osv, og
bogstaverne a-b-c. Hvordan vil du foreslå at man gør? Vi har en SQL og ikke
en mysql.
Egentlig ville jeg helst bare sortere dem højrestillet, men kan SQL
overhovedet det?

Mvh Maria



Leif Neland (11-03-2009)
Kommentar
Fra : Leif Neland


Dato : 11-03-09 12:11

Maria Frederiksen skrev:

> Her har jeg brug for hjælp. Vi har en kolonne, med varenumre, som både er
> tal og bogstaver. Varenumre skal sorteres 1-2-3-4...10-11 osv, og
> bogstaverne a-b-c. Hvordan vil du foreslå at man gør? Vi har en SQL og ikke
> en mysql.
> Egentlig ville jeg helst bare sortere dem højrestillet, men kan SQL
> overhovedet det?
>
> Mvh Maria
>
>

Hvis man installerer funktionerne til regulære udtryk (regexp) fra denne
side:

http://www.simple-talk.com/sql/t-sql-programming/tsql-regular-expression-workbench/

Kan man gøre dette:

ORDER BY CAST(dbo.RexexReplace('\D+', '', varenr, 1, 1) AS int),varenr
Dette fjerner blot alle ikke-cifre, og konverterer alle cifre til en
int. Afhængig af antal cifre i varenummer skal du måske bruge float.



Jeg har varenumre, der kan hedde "aa-1234-23-45"

ORDER BY CAST(dbo.RegexReplace('\D.*', '', dbo.RegexReplace('^\D+', '',
varenr, 1, 1), 1, 1) AS float), varenr

Her fjerner jeg først alle ikke-cifre i starten af varenr "^\D+"
Derefter alt fra og med første ikke-ciffer "\D.*"
Tilsidst konverteres til et tal for at sortere numerisk.
Jeg bruger float, fordi jeg har varenumre på 11 cifre, og det kan ikke
være i en int.
I sorteringsrækkefølgen sorterer jeg så først efter regexp'en, og
derefter efter det ubehandlede varenr, for at få "postfix'erne" sorteret
rigtigt.

Men, som ovennævnte artikel skriver, så er det ikke så effektivt, men
det virker på SQL Server 2000

/* it is no consolation for those who are stuck with SQL Server 2000,
but the CLR functions are a lot quicker for this sort of usage. */

Hvis jeg bruger det på det fulde udtræk af varelageret, ca 30000
records, får jeg timeout, men på et lille select, går det an.

Ellers ville jeg lave en ekstra kolonne til den numeriske værdi af
varenummeret. For at holde den opdateret, skal man så beregne værdien,
når man indsætter en ny vare, eller opdaterer et varenummer.

Der er så 3 muligheder.
1: Man skal sætte ekstra kode ind i applikationen hvert sted, man
opdaterer varenummeret
2: Man laver en batchkørsel, der f.ex. hver nat beregner værdien. Man må
så leve med, at sorteringen ikke er korrekt den første dag, varen er
indsat/opdateret.
3: Man laver en trigger, så databasen automatisk kalder funktionen til
at beregne sorteringsværdien, når varenummeret ændres/indsættes.

Leif

Aagaard (06-02-2009)
Kommentar
Fra : Aagaard


Dato : 06-02-09 23:21

> Vælg korrekt data type for kolonnen.
>
> INT fremfor VARCHAR(5)
>
Tak, Arne, det virker.

--
Aagaard



Anders Wegge Keller (07-02-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 07-02-09 21:08

Lars Kongshøj <lars_kongshoj@hotmail.com> writes:

> Ja, det er præcist en rædsel - undskyld mange gange at jeg kom til at
> formulere mig for diplomatisk.

> Hvordan kan man dog finde på at implementere en så meningsløs semantik?

C:\>ping 010.010.010.010

Pinging 8.8.8.8 with 32 bytes of data:

Samme meningsløshed, bare en order of magnitude værre.

--
/Wegge

Anders Wegge Keller (07-02-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 07-02-09 21:39

Arne Vajhøj <arne@vajhoej.dk> writes:

> Anders Wegge Keller wrote:
>> Lars Kongshøj <lars_kongshoj@hotmail.com> writes:
>>
>>> Ja, det er præcist en rædsel - undskyld mange gange at jeg kom til at
>>> formulere mig for diplomatisk.
>>
>>> Hvordan kan man dog finde på at implementere en så meningsløs semantik?
>>
>> C:\>ping 010.010.010.010
>>
>> Pinging 8.8.8.8 with 32 bytes of data:
>>
>> Samme meningsløshed, bare en order of magnitude værre.
>
> Meningsløst for ikke-programmøren, men at tal der starter
> med 0 opfattes som oktaler er ret almindeligt programmerings
> sprog.

Det er strtol() eller atoi() der er på banen i begge tilfælde.

--
/Wegge

Anders Wegge Keller (07-02-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 07-02-09 22:36

Arne Vajhøj <arne@vajhoej.dk> writes:

> De switcher ikke til oktal automatisk fordi første tal er 0. Det
> er logik højere oppe i app.

$> man 3 strtol

The string may begin with an arbitrary amount of white space (as
determined by isspace(3)) followed by a single optional '+' or '-'
sign. If base is zero or 16, the string may then include a "0x"
prefix, and the number will be read in base 16; otherwise, a zero
base is taken as 10 (decimal) unless the next character is '0', in
which case it is taken as 8 (octal).

I tilfældet ping under windows, er den hypotetiske "logik" en
manglende specifier af hvilket talsystem der er tale om.

--
/Wegge

Anders Wegge Keller (07-02-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 07-02-09 23:41

Arne Vajhøj <arne@vajhoej.dk> writes:

> Ah. En lille finesse. Jeg var ikke klar over at base=0 virkede på
> den måde.

De fleste impelmentationer af atoi() er strtol(ptr, NULL, 0). Det er
derfor jeg ikke vil lægge hovedet på blokken for om det er det ene
eller det andet.

> En eller anden må have ment at support for oktal var godt og valgt
> base=0 fremfor base=10.

Det lyder som en efterrationalisering. Prøv at pinge 07.08.09.010, og
fortæl mig hvor meget omtanke der ligger bag den adfærd.

--
/Wegge

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste