/ 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
MySQL - alternativ til substring
Fra : Henrik Stidsen


Dato : 05-03-07 16:52

Jeg har et lidt mærkeligt problem med MySQL.

Følgende:
SELECT
      SUBSTRING(forms.fieldvalue FROM 2) AS formsid,
      SUBSTRING(forms.fieldvalue FROM 2) AS fieldname
   FROM forms
   WHERE
      forms.formcollectionID=191


Giver det korrekte resultat.

SELECT DISTINCT
      SUBSTRING(forms.fieldvalue FROM 2) AS formsid,
      SUBSTRING(forms.fieldvalue FROM 2) AS fieldname
   FROM forms
   WHERE
      forms.formcollectionID=191

Giver forkert resultat - nemlig 2 felter med en tom streng i hver.

Så vidt jeg kan læse mig frem til er det SUBSTRING der er en fejl i og
den fejl burde være rettet i den version jeg bruger - 5.0.27.

Er der et alternativ til SUBSTRING der kan give mig det korrekte
resultat på både 4.x og 5.x servere?


 
 
Martin (05-03-2007)
Kommentar
Fra : Martin


Dato : 05-03-07 17:01

Henrik Stidsen wrote:
> Er der et alternativ til SUBSTRING der kan give mig det korrekte
> resultat på både 4.x og 5.x servere?

Som jeg ser det, så fjerner du kun tekst fra starten.
I det tilfælde ville jeg prøve med RIGHT() - og hvis du vil fjerne
bogstaver fra slutningen, så er det LEFT() - disse kan selvfølgelig også
kombineres fx

"kvadratisk"
SELECT LEFT(RIGHT('field',3),2) vil blive til "adrat"
SELECT LEFT('field',5) vil blive til "atisk"

Om hvordan det så fungerer med DISTINCT, det kan jeg så ikke udtale mig om

Henrik Stidsen (06-03-2007)
Kommentar
Fra : Henrik Stidsen


Dato : 06-03-07 00:02

Martin laid this down on his screen :
> Som jeg ser det, så fjerner du kun tekst fra starten.

Korrekt

> "kvadratisk"
> SELECT LEFT(RIGHT('field',3),2) vil blive til "adrat"
> SELECT LEFT('field',5) vil blive til "atisk"

Udemærket ide, det må jeg afprøve.

> Om hvordan det så fungerer med DISTINCT, det kan jeg så ikke udtale mig om

Det finder jeg ud af i morgen. Tak for tippet :)

--
Henrik Stidsen - http://henrikstidsen.dk/
Sometimes I lie awake at night, and I ask, "Where have I gone wrong?"
Then a voice says to me, "This is going to take more than one night." -
Charles M. Schulz



Henrik Stidsen (06-03-2007)
Kommentar
Fra : Henrik Stidsen


Dato : 06-03-07 10:07

On 5 Mar., 17:00, Martin <m...@SPAMscandesigns.dk> wrote:
> SELECT LEFT(RIGHT('field',3),2) vil blive til "adrat"
> SELECT LEFT('field',5) vil blive til "atisk"

Jeg har prøvet mig lidt frem med RIGHT/LEFT funktionerne. Som
udgangspunkt kan de ikke bruges da der skal angives hvor mange tegn af
strengen der skal bruges og jeg kender ikke længden på strengen på
forhånd.

Men, der er jo en mulighed at benytte en funktion til at tælle længden
af strengen:
RIGHT(forms.fieldvalue,CHARACTER_LENGTH(forms.fieldvalue)-1)

Sådan, en alternativ "implementering" af substring - og den virker i
både 4.x og 5.x med og uden DISTINCT :)


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