Avatar billede pelskee Nybegynder
13. august 2004 - 11:16 Der er 19 kommentarer og
2 løsninger

Dato format

jeg forsøger at lave et udtræk på dato fra en tabel, men det virker ikke fordi dato formaterne er forskellige. Hvad kan jeg gøre ?

SELECT *
FROM ordre
WHERE Dato = CURDATE()

Dato er af formatet: 12-08-2004
Men så vidt jeg kan se er MySQL af formatet: 2004-08-12

Er der nogen måde hvorpå jeg kan sammenligne de to formater ?

Det er hvad jeg kan finde på MySQL dataformat
CURDATE()
Returns the current date as a value in 'YYYY-MM-DD' or YYYYMMDD format, depending on whether the function is used in a string or numeric context. mysql> SELECT CURDATE();
        -> '1997-12-15'
mysql> SELECT CURDATE() + 0;
        -> 19971215
Avatar billede erikjacobsen Ekspert
13. august 2004 - 11:21 #1
Du burde vel lave dit datoformat i tabellen om til DATE. Så står det i YYYY-MM-DD
så du kan sammenligne og lave datoberegninger. Du skal blot konvertere det til et
andet format ved visning.
Avatar billede fennec Nybegynder
13. august 2004 - 11:21 #2
Er Dato kolonnen oprettet som tekst (varchar eller ligende) eller som datetime???
Avatar billede pelskee Nybegynder
13. august 2004 - 11:22 #3
Dato  text  Ja  NULL   
sådan er det i databasen
Avatar billede pelskee Nybegynder
13. august 2004 - 11:24 #4
Erik - jeg har gjort det med <% SetLocale(1030) %> når jeg opretter en record fordi jeg ikke kan kode omformatteringen i frontend (asp)
Avatar billede locturian Nybegynder
13. august 2004 - 11:28 #5
1. Sørg for at felttyperne er ens, enten Date, eller DateTime
2. Sørg for at serveren benytter samme sprog som du ønsker at benytte
- Fx. kan du sætte datoformat o.lign. ved at sætte en Session.LCid = 1030 på sin side. - Det er forresten dansk ;)
Avatar billede and_ Nybegynder
13. august 2004 - 11:30 #6
setlocale har en gang imellem givet mig problemer... jeg er gået over til:
Session.LCID = 1030

den virker for mig ;)
Avatar billede fennec Nybegynder
13. august 2004 - 11:36 #7
Det bedste ville være at ændre typen til datetime (som den burde være), men der kan måske gå data tabt.

Ellers kan du bruge cast()/convert() funktionerne til at ændre til Date formatet.

cast(CONCAT_WS('-',SUBSTRING(Dato,7,4),SUBSTRING(Dato,4,2),SUBSTRING(Dato,1,2)) as Date)

her bliver datoen splittet op med SUBSTRING() og samlet igen med CONCAT_WS()
Avatar billede pelskee Nybegynder
13. august 2004 - 11:38 #8
and_ : så <% Session.LCID = 1030 %> er at foretrække for <% SetLocale(1030) %> ?

locturian : jeg har godt nok brugt text som datatype for min Dato, men jeg skal ikke sammmenligne to felter fra databasen, men holde DagsDato (CURDATE()) op imod de ordre jeg har i min database. Hvis jeg skal bruge YYYY-MM-DD formatet så skal jeg konvertere det inden jeg viser det til mine brugere, og det aner jeg ikke hvordan man gør.
Avatar billede pelskee Nybegynder
13. august 2004 - 11:40 #9
fennec - vil du så anbefale at jeg ændrer datatypen i min tabel til:
Dato  datetime  Ja  NULL 
og så dropper <% SetLocale(1030) %> og i stedet konverterer datoen når jeg viser den i frontend ?

(er der nogen der kan hjælpe med sådan et script ?)
Avatar billede locturian Nybegynder
13. august 2004 - 11:42 #10
Gem ALTID(!!!) datoer i det rigtige format. Så kan du bruge, sammenligne, og bagkneppe formatet som du vil efterfølgende... ;)

Hvis du gemmer i felttypen Date kan du holde CURDATE() op imod dit felt, og få et resultat heraf...
Avatar billede and_ Nybegynder
13. august 2004 - 11:42 #11
jeg ved ikke om det er at foretrække....

Jeg har bare tit siddet med setlocale og flået håret ud af mit karseklippede hoved fordi jeg ikke har kunnet få den til at virke... Derfor er jeg gået til til session.lcid i stedet for.....

Bedre forklaring kan jo nok ikke give :) 

//and
Animal Wars: starring Duck Lakewalker
Avatar billede locturian Nybegynder
13. august 2004 - 11:46 #12
Når du udskriver din dato, kan du som jeg nævnte lige over, bagkneppe det som du vil, forstået på den måde, at du kan hive sekundet eller minuttet ud fra den dato hvis du vil (kræver du benytter datetime, og ikke date) - Så kan du fx. udskriver sådan her:

Response.Write "Det er i dag d. " & day(datofelt) & "/" & month(datofelt) & "/" & year(datofelt)

Bare for at illustere at du kan bryde det op...

Eller, du kan lave en "samlet" udskrift, ved nogle indbyggede funktioner, fx:

Response.Write "Det er i dag d. " & FormatDateTime(datofelt, vbLongTime)
Avatar billede locturian Nybegynder
13. august 2004 - 11:46 #13
Ak oh ve, jeg må kede mig på job - Sidder og skriver en længere artikkel for 30 point ;)
Avatar billede pelskee Nybegynder
13. august 2004 - 11:48 #14
hvordan skal jeg så ligge formatet i databasen ? bare med Date() i asp ?
Avatar billede pelskee Nybegynder
13. august 2004 - 11:53 #15
er der nogen der har link eller kode på hvordan jeg kan konvertere dato formatet 2004-08-13 til 13-08-2004 ?

locturian: jeg er overbevist, du får 30 point og karma op til begge øre
Avatar billede locturian Nybegynder
13. august 2004 - 11:55 #16
Håber ikke det var sarkasme ;)
Avatar billede pelskee Nybegynder
13. august 2004 - 12:01 #17
done :)
nogen der har input til mit indlæg af 13/08-2004 11:53:40
Avatar billede locturian Nybegynder
13. august 2004 - 12:03 #18
Hey, ingen karma? :D

Det datoformat, skal det bruges til indsættelse eller udtræk ?
Avatar billede fennec Nybegynder
13. august 2004 - 12:08 #19
du kan gøre det med en update.

update DinTabel set dato = CONCAT_WS('-',SUBSTRING(dato,7,4),SUBSTRING(dato,4,2),SUBSTRING(dato,1,2))

Du skal bare lige sikre dig at den klipper strengen rigtigt. Kan ikke huske om den starter ved 0 eller 1.

select CONCAT_WS('-',SUBSTRING(dato,7,4),SUBSTRING(dato,4,2),SUBSTRING(dato,1,2)) as newDate from DinTabel

udskriv resultatet og se om det er det rigtige format. Så kan du lave en update med samme funktion....

Hvis du ændre formatet til MySQL formatet (yyyy-mm-dd) burde du bagefter kunne ændre typen fra text til Datetime, uden tab af data. Men tag lige en bagup først alligevel.
Avatar billede pelskee Nybegynder
13. august 2004 - 12:10 #20
jeg har opdateret tabellen, jeg tænket på mit udtræk til frontend hvor datoen vises så den vises som 13-08-2004 i stedet for 2004-08-13
Avatar billede locturian Nybegynder
13. august 2004 - 12:12 #21
Som jeg skrev, kan du formatere dit datoudtræk præcis som du lyster ved at bruge indbyggede funktioner, eller ved at bryde det op - Se mit indlæg længere oppe...
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