Avatar billede Ulrich Seniormester
01. februar 2022 - 21:00 Der er 13 kommentarer

Hvis feli i tabel er to skal der bruges en fast dato

Her en .mdb database med en tabel ved navn AdresseListePersonerSlettet
I den har jeg to felter (kolonner) ved navn OprettetYearMonth og SlettetYearMonth
Har lavet denne streng som trækker dage diff ud mellem de to felter.
Det virker, men vil gerne have sat ind at hvis SlettetYearMonth er tom skal der bruges en fast dato fx '2022-01-01' til beregning af dage diff.
Hvordan gør jeg det?
datavar = "select DateDiff('d', OprettetYearMonth, SlettetYearMonth) as DateDiffLife From AdresseListePersonerSlettet Where OprettetYearMonth > ''"
Avatar billede arne_v Ekspert
01. februar 2022 - 21:21 #1
OprettetYearMonth
->
ISNULL(OprettetYearMonth, '2022-01-01')

Antager at der er bruge NULL og ikke tim streng.
Avatar billede Ulrich Seniormester
01. februar 2022 - 22:08 #2
Det er hvis SlettetYearMonth er tom der skal bruges en fast dato…
Det er ikke helt den løsning du er kommet med, eller er jeg forkert på den?
Den streng jeg har skrevet her virker, men hvis SlettetYearMonth er tom, kommer der ingen antal dage diff, og det vil jeg gerne have ud fra en fast dato, derfor er det at jeg skal have ind at hvis SlettetYearMonth er tom, så brug en fast dato.
Avatar billede sfsoeren Novice
01. februar 2022 - 23:27 #3
Dette bør virke:
"select DateDiff('d', OprettetYearMonth, NZ(SlettetYearMonth, '2022-01-01')) as DateDiffLife From AdresseListePersonerSlettet Where OprettetYearMonth > ''"
Avatar billede Rune1983 Ekspert
02. februar 2022 - 09:08 #4
Kan du ikke anvende CASE?

CASE
WHEN SlettetYearMonth LIKE ''
THEN '2022-01-01'
ELSE SlettetYearMonth
END
Avatar billede arne_v Ekspert
02. februar 2022 - 17:26 #5
CASE kan altid anvendes.

Men hvis der er en simpler funktion som kan bruges er det nemmere.

Det er imidlertid kritisk at vide om de manglende værdier er NULL eller blank streng ''.
Avatar billede Ulrich Seniormester
02. februar 2022 - 18:15 #6
Kan ikke fange dem på “” men kun på NULL, så de må være NULL.
Avatar billede arne_v Ekspert
02. februar 2022 - 20:32 #7
Hvis der er brugt NULL så bør ISNULL eller COALESCE funktionen kunne gøre det.

Men CASE er naturligvis altid en mulighed også.
Avatar billede Ulrich Seniormester
02. februar 2022 - 20:56 #8
Dette var løsningen:
datavar = "select DateDiff('d', OprettetYearMonth, IIf(IsNull(SlettetYearMonth), '" & DBDate(Now()) & "', SlettetYearMonth)) as DateDiffLife From AdresseListePersonerSlettet Where OprettetYearMonth > ''"

Function DBDate(fDate)
  DBDate = year(fDate) & "-" & right("0"&month(fDate),2) &"-"& right("0"&day(fDate),2)
End Function
Avatar billede arne_v Ekspert
03. februar 2022 - 01:34 #9
Er det MS Access og ikke MS SQLServer??
Avatar billede sfsoeren Novice
03. februar 2022 - 07:55 #10
Ja, jeg tror det er MS Access og derfor mener jeg stadigvæk, at følgende bør virke:
Dette bør virke:

"select DateDiff('d', OprettetYearMonth, NZ(SlettetYearMonth, '2022-01-01')) as DateDiffLife From AdresseListePersonerSlettet Where OprettetYearMonth > ''"

Har du prøvet det?
Avatar billede Ulrich Seniormester
03. februar 2022 - 08:15 #11
Ja det er MS Access, men NZ virker kun i Access Applikation og ikke Access Connection, der skal der bruges IIF.
Mit er Connection på hjemmeside på .ASP side.
Avatar billede sfsoeren Novice
03. februar 2022 - 08:51 #12
Ok, det har jeg ikke meget kendskab til. Kan den heller ikke bruge: COALESCE(SlettetYearMonth, '2022-01-01') ?
Avatar billede Ulrich Seniormester
03. februar 2022 - 22:23 #13
Ved det faktisk ikke, men søgning viser umiddelbart at det ikke kan.
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