Avatar billede bernhof Nybegynder
13. oktober 2004 - 12:54 Der er 9 kommentarer og
2 løsninger

Convert giver NULL

Jeg sidder med to varchar-felter, som jeg i min SQL SELECT sætning vil sætte sammen. Jeg gør som følger:

SELECT (FirstName + ' ' + LastName) AS FullName FROM People

Problemet er bare, at hvis LastName er NULL, bliver FullName også NULL, hvor jeg egentlig gerne vill have, at jeg bare fik FirstName ud istedet, og ikke NULL. Jeg forsøgte at løse det på denne måde:

SELECT (FirstName + ' ' + CONVERT(varchar(255),LastName)) AS FullName FROM People

... i håb om at den konverterede en evt. NULL-værdi i LastName til en tom streng (""). Men det gjorde den tilsyneladende ikke, og stadig blev FullName NULL.

Er der nogle der har et forslag til, hvordan jeg løser dette?

På forhånd tak - Mikkel.
Avatar billede bennytordrup Nybegynder
13. oktober 2004 - 12:56 #1
select (IsNull(FirstName, '') + ' ' + IsNull(LastName, '')) as FullName
Avatar billede mortency Nybegynder
13. oktober 2004 - 13:01 #2
SELECT FirstName, LastName FROM People
Case When LastName Is Null Then
    (FirstName) AS FullName
Else
    (FirstName + ' ' + LastName)
End AS FullName
Avatar billede bernhof Nybegynder
13. oktober 2004 - 13:38 #3
mortency > kan man nøjes med dette?

SELECT FirstName, LastName FROM People
Case When LastName Is Null Then
    FirstName
Else
    (FirstName + ' ' + LastName)
End AS FullName

-- jeg har fjernet AS FullName lige under Case..
Avatar billede bernhof Nybegynder
13. oktober 2004 - 13:40 #4
Ja, det kunne man sørme! I skal begge have tak for jeres svar! :) I kan dele point!
Avatar billede bernhof Nybegynder
13. oktober 2004 - 14:02 #5
Hov - har lige endnu et spørgsmål:

Hvis jeg sidder med felt, som både kan indeholde tekst og tal (dvs. et varchar-felt), så vil jeg gerne konvertere feltets indhold til int, hvis muligt. Hvis ikke muligt, skal tekstværdien bare returneres. Jeg forsøgte mig med følgende:

CASE WHEN (ISNUMERIC(TalOgTekstFelt) = 1) THEN
  CONVERT(int,TalOgTekstFelt)
ELSE
  (TalOgTekstFelt)
END AS TrackNumber

Men den brokker sig, hvis varchar feltet indeholder noget tekst, og siger fx.:

"Syntax error converting the varchar value 'A' to a column of data type int."

Nogle idéer?
Avatar billede bennytordrup Nybegynder
13. oktober 2004 - 14:04 #6
Det kan du ikke (jeg regner med, at det er som en kolonne i din select, du bruger den case)

SQL Server skal have samme datatype for en kolonne på samtlige rækker.
Avatar billede bernhof Nybegynder
13. oktober 2004 - 14:05 #7
Grunden til, at jeg vil forsøge at konvertere en evt. numerisk værdi til int, er, at jeg i så fald kan sortere korrekt efter feltets værdi, fx.:

1
2
3
10
A
B
(det er ligemeget om tekstværdier vises før eller efter numeriske)

og ikke:

1
10
2
3
A
B

Forstår I? :)
Avatar billede bernhof Nybegynder
13. oktober 2004 - 14:06 #8
Ok, fint! Det må jeg jo leve med ;)

Endnu en gang tak.
Avatar billede mortency Nybegynder
13. oktober 2004 - 14:32 #9
Dette burde løse problemet ditt.

SELECT ID ,
CASE
WHEN LastName Is Null Then
    FirstName
Else
    (FirstName + ' ' + LastName)
End AS FulllName,

CASE
WHEN ISNUMERIC(TalOgTekstFelt) = 0 THEN
  CONVERT(varchar,TalOgTekstFelt)
END AS TrackNumber_a,

CASE
WHEN ISNUMERIC(TalOgTekstFelt) = 1 THEN
  CONVERT(int,TalOgTekstFelt)
END AS TrackNumber_b

FROM People Order By TrackNumber_a ASC,TrackNumber_b ASC
Avatar billede mortency Nybegynder
14. oktober 2004 - 12:09 #10
Fikk du overstående til å virke?
Avatar billede bernhof Nybegynder
16. oktober 2004 - 12:42 #11
Yep det virker :) Tak
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