Avatar billede biskoppen Nybegynder
01. oktober 2003 - 10:28 Der er 13 kommentarer og
1 løsning

Den vender datoen om

Jeg har oprettet mig en simpel tabel [datotest] med disse 2 felter

id INT
dato DATETIME

Jeg laver en

INSERT INSERT INTO datotest (dato) VALUES ( GetDate() )

Derefter ligger følgende i databasen

'01-10-2003 10:16:03'

Men hvis jeg så laver en

UPDATE datotest SET dato = '01-10-2003 10:16:03' WHERE id = 1

Så ligger der pludseligt den omvendte dato i databasen

'10-01-2003 10:16:03'

Nogen der kan forklare hvad der sker ?
Avatar billede nikolajdu Nybegynder
01. oktober 2003 - 10:30 #1
Det Hvis dit felt er DATETIME så skulle den gerne smide det ind i formatet : 2003-10-01 10:30:22
Avatar billede nikolajdu Nybegynder
01. oktober 2003 - 10:32 #2
Smid det ind med : GetDate(NOW())

og træk så dansk dato ud med :

"SELECT DATE_FORMAT(n.dato, '%d/%m - %H:%i') AS nydato FROM datotest"

så har du den som "nydato"
Avatar billede bennytordrup Nybegynder
01. oktober 2003 - 10:32 #3
Det er SQL Servers håndtering af dato-felter og specielt fortolkning af datokonstanter.

Jeg bruger en gylden regel om, at datokonstanter altid skal angives i ISO-format. Dette er Microsoftgaranteret for, at det altid genkendes af SQL Server uanset evt. landespecifikke indstillinger.

Formatter således:

update datotest set dato = '20031001 10:16:03.000' where id = 1

ISO-formatet for datoer er yyyymmdd
Avatar billede nikolajdu Nybegynder
01. oktober 2003 - 10:33 #4
Åh sorry det er ms sql
Avatar billede biskoppen Nybegynder
01. oktober 2003 - 11:40 #5
Kan man ikke ændre en setting på SQL serveren så den forstår '01-10-2003 10:16:03' korrekt og ikke sætter det ind som '10-01-2003 10:16:03' ?
Avatar billede bennytordrup Nybegynder
01. oktober 2003 - 11:42 #6
Det kan du sandsynligvis godt, men hvilke programmer giver du så problemer? Der kan jo godt køre andre programmer mod SQL Serveren, som forventer at finde det datoformat, du ikke harmonerer med.

SQL Server er IMO kun data storage. Formattering af data er klientapplikationens ansvar. Og hvis det er til visning af data i Query Analyzer, så ville jeg lære at leve med det udseende, der returneres.
Avatar billede biskoppen Nybegynder
01. oktober 2003 - 11:54 #7
Det bruger jeg
Avatar billede biskoppen Nybegynder
01. oktober 2003 - 11:56 #8
Konstanten for denne værdi er tilsyneladende ikke længere adDBTimeStamp når jeg sender den afsted med en SP ? Benny ?
Avatar billede biskoppen Nybegynder
01. oktober 2003 - 12:10 #9
Problemet er at den nu fejler når jeg laver en

.Parameters.Append .CreateParameter("@DatePublished", adDBTimeStamp, adParamInput, 0, strRfDatePublished)

Med dit format
Avatar billede bennytordrup Nybegynder
01. oktober 2003 - 12:21 #10
Hvordan er feltet defineret i databasen?

DateTime?

Hvis så, så brug typen adDate
Avatar billede biskoppen Nybegynder
01. oktober 2003 - 13:17 #11
Virker heller ikke ..

Application uses a value of the wrong type for the current operation

.Parameters.Append .CreateParameter("@DatePublished", adDate, adParamInput, 0, strRfDatePublished)

strRfDatePublished = '20031001 13:08:00.000'
Avatar billede bennytordrup Nybegynder
01. oktober 2003 - 13:19 #12
dDatePublished = DateSerial(2003, 10, 1) + TimeSerial(13,08,00)
.Parameters.Append .CreateParameter("@DatePublished", adDate, adParmaInput, 0, dDatePublished)
Avatar billede bennytordrup Nybegynder
01. oktober 2003 - 13:20 #13
Du forsøger at overføre en streng til en datovariabel.
Avatar billede biskoppen Nybegynder
01. oktober 2003 - 13:34 #14
Så ser det ud til at virke, takker
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