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

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