Avatar billede simsen Mester
30. maj 2008 - 14:36 Der er 10 kommentarer og
1 løsning

Dato format i where clause fejler

Hej,

Jeg har mega problemer med en dato format.

Når jeg laver en insert laver jeg det med dansk datoformat (uden problem) 30-05-2008 13:25:20

Checker jeg efter i tabellen, står den korrekt på dansk 30-05-2008 13:25:20

Nu har jeg så en stored procedure, hvor jeg skal trække rækker ud på bagrund af kolonnen:

fProjectSkuTimeStamp >= @ReducedTime

Og jeg får så følgende fejl, når jeg forsøger at execute proceduren:

Msg 8114, Level 16, State 5, Procedure GetProjectSkuList, Line 0
Error converting data type varchar to datetime.

Execute paramterene ser ud som følgende:
USE [CRM_Master]
GO

DECLARE    @return_value int

EXEC    @return_value = [dbo].[GetProjectSkuList]
        @fProjectFId = 311,
        @ReducedTime = '30-05-2008 10:10:10'

SELECT    'Return Value' = @return_value

GO

Hvis jeg ændrer @ReducedTime til '05-30-2008 10:10:10' får jeg de korrekte to rækker ud jeg skal have......

Jeg har så forsøgt mig med at ændre min WHERE clause til:

fProjectSkuTimeStamp >= CONVERT(datetime, @ReducedTime, 110)

uden success - hvad skal jeg gøre, så jeg kan få det korrekt ud?

mvh
simsen :-)
Avatar billede erikjacobsen Ekspert
30. maj 2008 - 14:59 #1
Put det ind som '2008-05-30 10:10:10'
Avatar billede simsen Mester
30. maj 2008 - 15:03 #2
Hej Erik,

Jeg får datoen udefra og den kan ikke ændres - så jeg bliver nødt til at ændre den i proceduren.....men jeg ved bare ikke hvordan?
Avatar billede erikjacobsen Ekspert
30. maj 2008 - 15:20 #3
Man kan vist splitte eller substringe i en SP - men der er jeg et par kilometer fra at være ekspert.
Avatar billede simsen Mester
30. maj 2008 - 15:29 #4
Hej Erik,

Jeg vil kigge på det i løbet af weekenden......... takker for hjælpen indtil nu :-)
Avatar billede HenrikSjang Nybegynder
31. maj 2008 - 17:39 #5
Det ville nok være bedre at arbejde med datatypen DATETIME i stedet for at gemme en dato som en varchar. På den måde vil du ikke rende ind i problemer med formatet. Hvis du vil selecte datoen ud i et bestemt format, kan du kigge på CONVERT funktionen. Hvis du gemmer datoer som DATETIME, så får du også flere muligheder for at sortere på datoer, og få info om hvilken dag en given dato er, eller hvilken uge datoen ligger i.
Avatar billede simsen Mester
02. juni 2008 - 10:33 #6
Hej sjang,

Jeg arbejder med datatypen DATETIME - jeg har lige checket endnu engang her til morgen......

I tabellen står den som DATETIME og det jeg kommer ind i storedproceduren (altså variablen) er også i DATETIME format........
Avatar billede simsen Mester
03. juni 2008 - 15:20 #7
Hej Erik,

Hvis du er her endnu så læg et svar........ det var substring jeg brugte.....

Hej sjang,

Jeg brugte datatypen DATETIME........og den fejlede også ved at lave substrings, da jeg ændrede variablens parameter til nvarchar kørte det bare perfekt:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



ALTER PROCEDURE [dbo].[TestTimeStamp]
    @ReducedTime AS NVARCHAR(MAX)  --Tidsrum fra


AS
BEGIN

        SELECT    fProjectSkuTimeStamp



        FROM      tProjectSku


        WHERE   
                fProjectSkuTimeStamp >= SUBSTRING(@ReducedTime,7,4)+'-'+SUBSTRING(@ReducedTime,4,2)+'-'+SUBSTRING(@ReducedTime,1,2)

END

mvh
simsen :-)
Avatar billede erikjacobsen Ekspert
03. juni 2008 - 15:31 #8
Det burde ikke være nødvendigt at bruge NVARCHAR til en dato - men det er nok ligegyldigt!

Jeg samler slet ikke på point, tak.
Avatar billede simsen Mester
03. juni 2008 - 16:05 #9
Hej erik,

Jeg glemmer det hver gang........men tak for hjælpen :-)

Og ja vi er fuldstændig enige.........det burde ikke være nødvendigt.......Jeg har ikke ét eneste sted læst (og jeg har været MANGE steder) at man skulle bruge nvarchar...tværtimod er der blevet skrevet, man SKAL bruge datetime formatet..... Men det virker bare ikke når jeg har datetime format........kun når jeg bruger nvarchar..... så for mig er det stadig et mysterium
Avatar billede erikjacobsen Ekspert
03. juni 2008 - 17:08 #10
Jeg mener VARCHAR i stedet for NVARCHAR. Det du putter ind er en streng, ikke en DATETIME. Strengen repræsenterer selvfølgelig værdien i en DATETIME, men det er noget andet.
Avatar billede simsen Mester
09. juni 2008 - 13:18 #11
Hej Erik,

Ja nu putter jeg en streng ind......Da jeg puttede et datetime format ind, var det jeg fik fejlen......

Efter at have ændret det til en streng, kan jeg bytte rundt på rækkefølge mm uden fejl......
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