Avatar billede pigbear Nybegynder
08. december 2008 - 12:25 Der er 6 kommentarer

ExecuteScalar Count(stjerne) med where sætning

Hej, jeg har et underligt problem med at returnere count(*) from tabel med en where sætning der angiver et dato interval

Min sql ser således ud:

SELECT    Count(*) as 'Antal'
FROM        t1
where CONVERT(DateTime,day_month_year) =CAST(Datepart(day,getdate())As Varchar) + '-' +CAST(Datepart(month,getdate()) As Varchar)+ '-' +CAST(Datepart(year,getdate()) As Varchar)

og i c#:
int s = (int)myCommand_lyklatol.ExecuteScalar();

Når jeg afvikler denne kode så får jeg følgende fejl:

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

Men hvis jeg fjerner min where sætning so virker det fint.

Det ser ud som om at den tar typen fra min where sætning og returnerer den som en datetime istedet for som int.

Hvad gør jeg galt ?

mvh

pigbear
Avatar billede aaberg Nybegynder
08. december 2008 - 12:52 #1
Der er flere ting i din where sætning, som ser mærkelig ud. Først konverterer du day_month_year kolonnen til en DateTime. Men det du sammenligner det med, konverterer du til en varchar.

Hvordan ser indholdet af day_month_year kolonnen ud? Måske jeg kan hjælpe dig med at skrive sætningen rigtigt.
Avatar billede pigbear Nybegynder
08. december 2008 - 12:58 #2
Hej,
Indholdet ser sådan ud:
8-12-2008

Datoen er gemt i et view hvor typen er en varchar.

Jeg vil at sammenligningen skal virke også hvis det fx står 08-12-2008, og det virker hvis man laver en convert inden man sammenligner
Sætningen virker perfekt i ms sql server management  studio express, men jeg får som sagt fejlen når jeg kører min sqlsætning fra mit webprojekt.

Hvis du har en anden nemmere måde at lave sætningen på er du meget velkommen. Fx getdate som returnerer datoen i rigtigt format dvs. dd-mm-yyyy
Avatar billede aaberg Nybegynder
08. december 2008 - 13:15 #3
Prøv:

SELECT    Count(*) as 'Antal'
FROM        t1
WHERE day_month_year = CONVERT(VARCHAR, GetDate(), 105)

CONVERT funktionen tager en optional style-parameter. Denne bestemmer hvilket format datoen skal formateres til. Sætter du denne til 105, konverteres datoen til "dd-mm-yyyy". Se eventuelt nedenstående link:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
Avatar billede arne_v Ekspert
08. december 2008 - 15:10 #4
Jeg undrer mig mere over de '' i:
  as 'Antal'
Avatar billede aaberg Nybegynder
08. december 2008 - 15:30 #5
Hmm, den havde jeg ikke lige spottet. Burde nok have været
SELECT Count(*) as "Antal"
eller bare
SELECT Count(*) Antal

Det kan selvfølgelig godt være derfor det virker i SQL Server Management Studio, og ikke fra ExecuteScalar() metoden.
Avatar billede pigbear Nybegynder
08. december 2008 - 16:40 #6
Hej igen,
Jeg har prøvet WHERE day_month_year = CONVERT(VARCHAR, GetDate(), 105),
men problemet er at data er gemt som 8-12-2008 og ikke som 08-12-2008(som er det getdate returnerer med kode 105)

'Antal' den godtager både " og ' så jeg kan skrive 'Antal stk.'

mvh

pigbear
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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