Peter Brodersen skrev:
>> De metoder du viser giver fejl i MSSQL.
>
> Hm - den CAST-syntaks er ellers en del af SQL92.
CAST virker også fint i MSSQL - så vidt jeg kan se er det MySQL der
ikke holder sig til standarden.
Hvis jeg læser 6.10.3.b i SQL-92 korrekt, skal der kastes en
undtagelse hvis en streng, efter at den er trimmet for indledende
og afsluttende mellemrum, ikke kan læses som en "signed numeric
literal". Det er netop hvad MSSQL gør (jeg er ikke helt sikker på
om håndteringen af mellemrum mellem <sign> og <unsigned numeric
literal> er korrekt, men andre tekststrenge kaster en undtagelse
som de skal).
De følgende casts fungerer alle i MSSQL:
SELECT CAST('3' AS integer)
SELECT CAST(' 3 ' AS integer)
SELECT CAST(' -3' AS integer)
SELECT CAST(' - 3' AS integer)
SELECT CAST(' - 3 ' AS integer)
Et lille pluk fra SQL-92:
,---- [ 6.10 <cast specification> ]
| 3) If TD is exact numeric, then
|
| Case:
|
| [snip]
|
| b) If SD is character string, then SV is replaced by SV with any
| leading or trailing <space>s removed.
|
| Case:
|
| i) If SV does not comprise a <signed numeric literal> as
| defined by the rules for <literal> in Subclause 5.3,
| "<literal>", then an exception condition is raised:
| data exception-invalid character value for cast.
|
`----
<
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt>
> Indsæt valgfri joke om at MySQL understøtter den
Tja - eksemplet er et blandt utallige på at MySQL tillader
konstruktioner der giver fejl i andre databasesystemer (og burde
give fejl i forhold til standarderne).
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen