sql >> Databasteknik >  >> RDS >> Sqlserver

Ändra standarddatumformat lagrat i en databas

Det är kärnan i förvirringen. Bara för att SQL Server Management Studio visar en datetime-kolumn i det formatet betyder inte att den är lagrad SOM TEXT ÅÅÅÅ-MM-DD hh:mm:ss.zzz. Den lagras som binär, ungefär som 0000101000001010..

Dina datum lagras i SQL Server som en serie byte (bitar egentligen) som utgör ett numeriskt värde som är en offset från 1900-01-01. Det finns inget inbyggt format på datumen. Det du syftar på är att SSMS som standard visar [visa] datetime-kolumner som ÅÅÅÅ-MM-DD hh:mm:ss.zzz. Om du använder ett front-end-programmeringsverktyg kan det också införa ett standardformat [display] om du inte har bett om ett annat.

Det finns absolut INGET sätt att få SSMS att visa datetime-data i ett annat format genom alternativ eller konfiguration. Om du måste måste du uppdatera SQL-frågan för att konvertera datetime-kolumnen till en VARCHAR-kolumn som innehåller den TEXTuella motsvarigheten i ett visst format. Det kan vara användbart i SSMS, men skulle vara dåligt när det används som en datakälla till front-end GUI/webappar - eftersom värdena inte är datetime och inte kan användas för intervallberäkning, grafer, bundna till datumkontroller etc.

Se detta exempel på att visa tid (getdate()) som ÅÅÅÅ-DD-MM, ett mycket ovanligt format. Observera att datumfältet/variabeln måste användas två gånger:

select stuff(convert(char(7), getdate(), 120), 5, 0, '-' + convert(char(2), getdate(), 3))


  1. TemplateSyntaxError:Fångade ImportError under rendering:kan inte importera namnverktyg

  2. Hämta dynamiskt parameternamn och aktuella värden i T-SQL-lagrad procedur

  3. Returvärde cross join

  4. Bästa metoder för att effektivt lagra md5-hashar i mysql