/ 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
Samle streng på tværs af poster i SQL
Fra : Ryan Dahl


Dato : 07-06-03 12:07

Hej,

hvis jeg f.eks. har en tabel indeholdende 4 poster:

1: "Der var engang "
2: "en lille and der "
3: "svømmede i "
4: "dammen."

Og jeg så gerne vil lave en forespørgsel, som kombinerer
tekststrengene og returnerer indholdet i én post. - Altså lidt samme
princip som standard-funktionen sum(), men blot med tekst i stedet.

Det må ikke foretages med en indbygget funktion, som kun findes i
MySQL eller lign., - helst ANSI SQL.

På forhånd tak.
Ryan


 
 
Troels Arvin (07-06-2003)
Kommentar
Fra : Troels Arvin


Dato : 07-06-03 16:28

On Sat, 07 Jun 2003 13:07:12 +0200, Ryan Dahl wrote:

> 1: "Der var engang "
> 2: "en lille and der "
> 3: "svømmede i "
> 4: "dammen."
>
> Og jeg så gerne vil lave en forespørgsel, som kombinerer
> tekststrengene og returnerer indholdet i én post.

I følge ISO SQL:1999 er "||" sammenkædningsoperator:
--------------------

select _____ || _____ from ...;

Dette virker da også i PostgreSQL og Oracle, se fx. PostgreSQL:

test=> select 'Der var engang ' || 'en lille and, der '
test-> || 'svømmede i ' || 'dammen.' as output;
output
-----------------------------------------------------
Der var engang en lille and, der svømmede i dammen.
(1 row)

I følge http://dbazine.com/gulutzan3.html understøttes ||-operatoren også
af IBM.

I følge O'reillys "SQL in a Nutshell" findes der ifølge en SQL-standard
også funktionen CONCATENATE, der virker som følger:
CONCATENATE(expression || expression)

Den funktion kan jeg dog ikke lige finde noget produkt, der understøtter,
og jeg kan heller ikke se den nævnt i noget af det SQL-standard-materiale,
jeg har adgang til.

Hvor det ikke virker:
---------------------
MySQL mener at det er federe, at || er synonymt med "OR". Suk. Men ifølge
http://www.sams.com/catalog/article.asp?product_id={CB2B04C4-F816-4D4D-B918-079EA18F3682}&element_id={EF85072E-D11E-4E0E-9A82-A8D43ADCED08}
kan den indstilles til at følge standarden på dette område. Jeg ved
ikke lige hvordan. MySQL har i øvrigt deres selvopfundne CONCAT-funktion,
som er beskrevet i deres manual.

Udviklerne af MS SQL har valgt, at "+" i stedet skal bruges som
concatination operator.


I øvrigt:
---------
Hvad skal du bruge det til? Hvis det har med søgning i tekster at gøre, så
undersøg, om dit databaseprodukt understøtter "fuldtekst" søgninger.

/Troels

Troels Arvin (07-06-2003)
Kommentar
Fra : Troels Arvin


Dato : 07-06-03 17:08

On Sat, 07 Jun 2003 17:28:07 +0200, Troels Arvin wrote:

> I følge ISO SQL:1999 er "||" sammenkædningsoperator:
> --------------------

[...]

Glem mit svar. Jeg havde ikke set, at du ønskede en slags aggregeret
sammenkædning.

/Troels


Ole Nielsby (07-06-2003)
Kommentar
Fra : Ole Nielsby


Dato : 07-06-03 16:19


Ryan Dahl <junk_this_way@hotmail.com> skrev:

> Hej,
>
> hvis jeg f.eks. har en tabel indeholdende 4 poster:
>
> 1: "Der var engang "
> 2: "en lille and der "
> 3: "svømmede i "
> 4: "dammen."
>
> Og jeg så gerne vil lave en forespørgsel, som kombinerer
> tekststrengene og returnerer indholdet i én post. - Altså lidt samme
> princip som standard-funktionen sum(), men blot med tekst i stedet.
>
> Det må ikke foretages med en indbygget funktion, som kun findes i
> MySQL eller lign., - helst ANSI SQL.

Mig bekendt er der ingen løsning på problemet ud over at lave en
stored procedure eller lignende. Jeg har forsøgt at løse problemet
engang - i en situation hvor jeg ikke havde mulighed for at definere
stored procedures - men måtte give op og programmer mig udenom.

ON/Fjern sneglen fra min svaradresse


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

Månedens bedste
Årets bedste
Sidste års bedste