Avatar billede thomas_yde Nybegynder
16. marts 2010 - 13:32 Der er 5 kommentarer og
1 løsning

IsNull og LEFT på null returnerer forkert svar

SELECT ISNULL(Left('Test',1),'NULL')
-> returnerer 'T' som planlagt

SELECT LEFT(null,1)
-> returnerer NULL som planlagt

Men denne sætning laver nogle underlige ting...

SELECT IsNull(left(NULL,1),'NULL')
-> Returnerer 'N'
-> Formodet resultat var: 'NULL' som en streng.

Er der nogle der kan give en logisk forklaring på dette spørgsmål?
Avatar billede arne_v Ekspert
16. marts 2010 - 14:42 #1
LEFT(NULL,1) er af typen CHAR(1)
Avatar billede arne_v Ekspert
16. marts 2010 - 14:43 #2
Du kan evt. proeve:

ISNULL(LEFT(felt,1)+'  ','NULL')

og se om den fixer problemet.
Avatar billede thomas_yde Nybegynder
16. marts 2010 - 14:51 #3
Jeg fandt ud af problemet består i den måde IsNull virker på.

Den tager altid den mindste værdi expession og derfor kan den ikke returnere mere end dette hvor i mod COALESCE kan klare dette problem. Det havde jeg bare ikke lige indset.

Derfor virker:
SELECT IsNull(LEFT(NULL,1),'NULL')
-> return: 'N'

SELECT COALESCE(LEFT(NULL,1),'NULL')
-> return: 'NULL'

problemet er også beskrevet her:
http://wiki.lessthandot.com/index.php/Three_differences_between_COALESCE_and_ISNULL
Avatar billede thomas_yde Nybegynder
16. marts 2010 - 14:52 #4
Men smid et svar for indsatsen :)
Avatar billede arne_v Ekspert
17. marts 2010 - 02:01 #5
COALESCE er nok pænere men mit forslag virkede også:

1> SELECT ISNULL(LEFT(NULL,1),'NULL')
2> GO

----
N

(1 row affected)
1> SELECT COALESCE(LEFT(NULL,1),'NULL')
2> GO

----
NULL

(1 row affected)
1> SELECT ISNULL(LEFT(NULL,1)+'  ','NULL')
2> GO

----
NULL

(1 row affected)
Avatar billede arne_v Ekspert
17. marts 2010 - 02:01 #6
og et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester