webForumDet fria alternativet

från varchar till date

ASP

16 svar · 934 visningar · startad av dendålige

Medlem sedan jan. 2003188 inlägg
Frågan#1

Hej! det är så att jag har sparat datum som text och när man nu ändrar om så ändras ju alla datum till 0000-00-00 eller liknande. jag har även spart i text under 3 olika fält år, månad, dag. så även om jag ändrar format till dateTime så har jag kvar infon som behövs.

Frågan är nu om jag på något smart sätt, förmodligen göra en update fråga från dom andra tabellerna, men har fått tomt i huvudet hur den isåfall ska se ut och hur jag ser till att den uppdaterar så det fungerar till datetime.

Förstår ni hur jag menar? =)

Medlem sedan juni 20004 308 inlägg
#2

Om jag förstår dig rätt har du en databas, innehållande en tabell med ett fält i formatet varchar som du vill konvertera till datum-format?

Lösning 1) Enklast utan utan programmering - Exportera databasen (vilken motor du nu använder) till ms-access som är rätt duktigt på att gissa datumformat. Ändra det aktuella fältet till "Datum/tid" i access och exportera tillbaks datanbasen.

Lösning 2) Skapa ett nytt fält i den befintliga databasen. Gör ett script som snurrar igenom alla poster i databasen, läser ditt varchar-fält och skriver tillbaks det (update) till det nya datumfältet. Är datat i ditt varchar-fält automatiskt genererat så att det alltid har samma format är ju detta enkelt.

Svårt att ge ett mer konkret svar när man inte vet förutsättningarna. Är databasen i grund och botten en access-databas är ju alternativ 1 allra enklast. Bara att plocka ner databasen lokalt och göra konverteringen.

Medlem sedan jan. 2003188 inlägg
#3

datumet är sparat t.ex 22/2/2009 hur skriver jag om den varchar till ett nytt fält som är av typen Date och ska bli 2009-02-22

försöker köra typ:
Connect.Execute "UPDATE statte_saljare SET datumet2 = "&RecSet("datum")&" where id = '"&RecSet("id")&"'"

Men den fungerar inte. får inge fel, bara att dne inte uppdaterar och fältet är fortfarande 0000-00-00

Tacksamm för hjälp

Medlem sedan aug. 20039 340 inlägg
#4
Connect.Execute "UPDATE statte_saljare SET datumet2 = '" & RecSet("datum") & "' where id = " & RecSet("id")

Fnuttfel...
För det första bör datumet nog vara inneslutet av enkelfnuttar. För det andra bör nog id'et inte vara det. (Jag gissar att id är ett tal av något slag) Sen kan du utöver det behöva konvertera datumformatet. (Vet ej exakt hur MSSQL hanterar det)

Medlem sedan jan. 2003188 inlägg
#5

har testat med det sättet också. det är mera att jag måste göra om strängen så att det passar fälttypen Date

Medlem sedan jan. 2003188 inlägg
#6

ingen som sitter med en bra och smart lösning? det jag ska göra är andra uppdatera en kolumn med texten 2/2/2009 som är varchar så att det blir rätt typ i ett annat fält som ska vara Date och alltså inte text. och den ska visa 2009-02-02.

Medlem sedan dec. 200012 464 inlägg
#7

Vilken databashanterare är det?

Medlem sedan jan. 2003188 inlägg
#8

jag kör med mySQL... och det webbhotellet jag har så kör man allt via phpmyadmin...

Medlem sedan aug. 20039 340 inlägg
#9

Du kan göra det helt i SQL. (Alltså utan PHP-kodning)
Kör denna fråga i SQL-prompten: (Det finns en sådan i phpMyAdmin)

UPDATE statte_saljare 
SET `datumet2` = CONCAT(
  SUBSTRING_INDEX(`datum`, '/', -1), '-', 
  SUBSTRING_INDEX(SUBSTRING_INDEX(`datum`, '/', 2), '/', -1), '-', 
  SUBSTRING_INDEX(`datum`, '/', 1)
);

När du har bekräftat att datumen har konverterats korrekt kan du ta bort ursprungskolumnen.

Medlem sedan jan. 2003188 inlägg
#10

tack så mycket, det fungerar nästan helt perfekt. men den har sparat datumet såhär 2/14/2009 alltså månad/dag/år

scriptet du skrev var för dag/månad/år... tror du att ud kan hjälpa mig o ändra den kod du skrev så den fungerar?

Medlem sedan aug. 20039 340 inlägg
#11

Jag utgick från ditt exempel:

dendålige skrev:

datumet är sparat t.ex 22/2/2009 hur skriver jag om den varchar till ett nytt fält som är av typen Date och ska bli 2009-02-22

Så här ska det se ut då:

UPDATE statte_saljare 
SET `datumet2` = CONCAT(
  SUBSTRING_INDEX(`datum`, '/', -1), '-', 
  SUBSTRING_INDEX(`datum`, '/', 1), '-', 
  SUBSTRING_INDEX(SUBSTRING_INDEX(`datum`, '/', 2), '/', -1)
);
Medlem sedan jan. 2003188 inlägg
#12

tack, lyckades klura ut det också... tack så mycket för hjälpen!!! vet du hur jag får så att sidan skriver ut som lcid =1053, men fungerar inte på detta webbhotel.

För om jag kör RecSet("datum") nu så skriver den fortfarande ut det som 2/22/2009 även fast det står 2009-02-22 i databasen med Date

Medlem sedan dec. 19995 874 inlägg
#13

Menar du

Session.LCID = 1053
Medlem sedan aug. 20039 340 inlägg
#14

Jag vet inte hur du automatiskt koverterar till valfritt LCID, men vill du ha svenskt format kan du göra så här t ex:

SELECT DATE_FORMAT(`date`, '%Y-%m-%d') AS datum, ...
eller
SELECT DATE_FORMAT(`date`, '%e/%c-%Y') AS datum, ...

ASP har säkert några nyttiga funktioner också om du letar lite.

Medlem sedan aug. 20039 340 inlägg
#15

Brimba skrev:

Menar du

Session.LCID = 1053

Fast då måste man nog mata datumsträngen genom en ASP-funktion för att konvertera den. Vad den funktionen heter vet inte jag då jag inte är bekant med ASP.

Medlem sedan dec. 19995 874 inlägg
#16

nitro2k01 skrev:

Fast då måste man nog mata datumsträngen genom en ASP-funktion för att konvertera den. Vad den funktionen heter vet inte jag då jag inte är bekant med ASP.

FormatDateTime(datum, 2)
Medlem sedan aug. 20039 340 inlägg
#17

Brimba skrev:

FormatDateTime(datum, 2)

Respekterar FormatDateTime det LCID som man sätter i session?

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)