13. august 2004 - 11:16Der 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
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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.
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 ;)
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.
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 ?)
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.....
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)
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.
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...
Synes godt om
Ny brugerNybegynder
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.