Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Datumhantering i SQL-server

Postades av 2003-01-21 08:22:08 - Fredrik Yggmark, i forum sql-server/msde, Tråden har 13 Kommentarer och lästs av 1482 personer

Hej!
Jag har problem med datum och tidshantering. Om jag bara vill visa ÅR eller ÅR/DATUM eller TIM/MIN osv. Hur hanterar jag detta?
Kan jag lägga in en CONSTRAIN som ger mig rätt formatering?

Tackar på förhand.

Fredrik


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-21 08:59:43 - Jarle Skogheim

Det finns en funktion som heter DATEPART.

Ex. DATEPART(year, GETDATE()) - plockar ut år.
DATEPART(mi, GETDATE()) - plockar ut minut.


// Jarle


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-21 10:41:28 - Emma Magnusson

Hej,

och vill du veta mer om DATEPART leta upp sqlbol.chm som alltid medföljer vid
installtion. De gör iofs ingen direkt reklam för den, utan tror du får gå in i det
bibliotek där du installerat SQL Server och söka.

Finns även några andra bra datumkommandon... =)

/Emma


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-21 10:59:00 - Christoffer Hedgate

Det finns även YEAR(), MONTH() och DAY()-funktioner. Alternativt kan man använda CONVERT.


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-21 13:53:42 - Jarle Skogheim

Tror dock han skulle använda det för att plocka ut en del av datum i ett datumfält i en tabell (eller jag går utifrån det :))

Ex. DATEPART(year, dateInserted), där dateInserted är en kolumn av typ datetime i tabellen.


// Jarle


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-21 16:18:12 - Christoffer Hedgate

Absolut, men lika bra fungerar YEAR(dateInserted) eller CONVERT(char(4), dateInserted, 120). Men visst, DATEPART är förmodligen det jag skulle använt med, bara visade några andra exempel.


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-21 22:35:37 - Micke Hansson

Hejsan

Om du använder SQL Server 2000 kan du använda dig av följande user-defined function..

------
CREATE FUNCTION dbo.Dateformat
(
@Date datetime,
@Dateformat varchar(100)
)

RETURNS varchar(100)

AS

BEGIN
SET @Dateformat = REPLACE(@Dateformat, 'yyyy', DATEPART(yy, @Date))
SET @Dateformat = REPLACE(@Dateformat, 'yy', RIGHT(CONVERT(varchar(4), DATEPART(yy, @Date)),2))
SET @Dateformat = REPLACE(@Dateformat, 'mm', RIGHT(100 + DATEPART(mm, @Date), 2))
SET @Dateformat = REPLACE(@Dateformat, 'dd', RIGHT(100 + DATEPART(dd, @Date), 2))
SET @Dateformat = REPLACE(@Dateformat, 'hh', RIGHT(100 + DATEPART(hh, @Date), 2))
SET @Dateformat = REPLACE(@Dateformat, 'mi', RIGHT(100 + DATEPART(mi, @Date), 2))
SET @Dateformat = REPLACE(@Dateformat, 'ss', RIGHT(100 + DATEPART(ss, @Date), 2))

RETURN @Dateformat
END
------


Denna funktion byter ut dina datumdelar (yy, mm, mi osv) i strängen mot motsvarande värde från datumvaribeln..

Din SELECT-sats kan se ut på följande sätt..

SELECT dbo.Dateformat(getdate(), 'yyyy-mm-dd')

Fördelen är att den är väldigt lätt att få till datumformat för olika länder..
Nackdelen med denna funktion är att om du använder ADO och väljer att kör recRecordset.sort på datumkolumnen så kan den sortera fel genom att kolumnen är en sträng.. Då kan du, istället för att formatera datumet i SELECT-satsen, göra det vid presentationen med en motsvarande funktion i vb-script eller vb-kod..

Micke


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-21 23:37:34 - Fredrik Yggmark

Oj,oj,oj!
Tack för alla ideer och snabba svar.

Häsningar

Fredrik

<i></i>


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-22 13:11:39 - Christoffer Hedgate

Ojoj, så där ska man absolut _inte_ göra! Den funktion som presenteras i inlägget tar långt mycket mer prestanda än följande, vilket ger exakt samma resultat:

SELECT CONVERT(varchar(10), getdate(), 120)

Visst, funktionen stödjer lite andra saker också, men det kan åstadkommas med andra medel om så behövs.


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-22 14:04:42 - Micke Hansson

Visst håller jag med om att den är prestanda krävande, men det är ju i relation hur många poster som ska presenteras.. När man börjar närmar sig tusentalet kan man börja diskutera om det är vettigt att loopa upp det tex websida eller listviewkontroll..

Just i det exempel som jag visade fanns det ett motsvarande för CONVERT men den räcker inte långt om man vill programmera multinationella siter där användarna själva kan bestämma om de vill visa sekunder när något är skapat (beroende på om det är relevant eller inte), visa endast datum/tid mm, utan att koda ihjäl sig..

Micke


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-22 15:23:49 - Christoffer Hedgate

Det handlar inte om hur många rader det påverkar, det är grundläggande fel att i det mängdbaserade 'språket' SQL hantera saker procedurellt eller rad-för-rad. För det första ville den som frågar här inte alls åstadkomma det man kan göra med funktionen du visade och därför är det enligt mig fel att visa honom en 'dålig' lösning. Dessutom kan man göra allt funktionen gör med standardfunktioner som CONVERT i SQL. Slutligen, om vad du vill göra är att låta användare på en website själv välja hur datum ska visas tycker jag man ska returnera dem som datum från databasen, och därefter i webbapplikationen formatera dem som man vill när mn skriver ut dem.

UDFer är något man ska vara mycket försiktig med i SQL, framförallt inline UDFer som returnerar ett skalärt värde. Dels är de nya i SQL Server och säkert inte fullt optimerade än, men framförallt så är de inte mängdbaserade och därmed kan en udf som gör precis samma sak som en vanlig systemfunktion (t ex convert) se ut att fungera bra när man testar den med ett enskilt värde, men när man använder den i en fråga som returnerar potentiellt massor av rader så kan det bli förödande konsekvenser för prestandan.


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-22 18:57:55 - Micke Hansson

Håller inte riktigt med dig.. Att använda sig av subselecter eller udf:er i SELECT-satsen (rad för rad) är inte fel, det kan vara enda sättet att lösa ett problem. Sedan har det naturligtvis en stor inverkan på prestandan beroende hur många poster som returneras.. Några problem har jag aldrig haft med udf:er däremot har dom löst en massa problem.. Däremot håller jag med dig att det kanske inte var den bästa exemplet att använda för att lösa ursprungsproblemet i tråden.. Av erfarenhet försöker jag alltid att lägga logiken så långt bak som möjligt i lagren(db-vbcom-asp-xsl), dels för man vet aldrig vem eller vad som kommer att använda sig av systemet dels för att jag 'litar' mer på db och com miljö än script.. Ibland går inte det och du får man knuffa fram den ett steg..

Sedan skulle det vara kul om du kunde visa hur CONVERT funktionen skulle lösa samma funktionalitet som exemplet..

Micke


Svara

Sv: Datumhantering i SQL-server

Postades av 2003-01-22 23:11:03 - Christoffer Hedgate

> Att använda sig av subselecter eller udf:er i SELECT-satsen (rad för rad) är inte fel, det kan vara enda sättet att lösa ett problem. Sedan har det naturligtvis en stor inverkan på prestandan beroende hur många poster som returneras.

Återigen, det har inget med hur många rader som returneras att göra, det handlar om att skriva kod på ett mängdbaserat (eng. set based) sätt. Subselects och udf-er har inget med varandra att göra (mer än att de kan användas till samma sak, nämligen att returnera ett skalärt värde eller ett rowset som kan användas som table source). Subselects är naturligtvis inget fel att använda.

> Några problem har jag aldrig haft med udf:er däremot har dom löst en massa problem.

Se ovan.

> Av erfarenhet försöker jag alltid att lägga logiken så långt bak som möjligt i lagren(db-vbcom-asp-xsl), dels för man vet aldrig vem eller vad som kommer att använda sig av systemet dels för att jag 'litar' mer på db och com miljö än script.

Visst, men man behöver inte använda saker till annat än vad de är till för. Presentation av data anser jag att man gör i presentationsskiktet, men visst, jag förstår tanken. Fortfarande anser jag dock att man bör försöka skriva det mängdbaserat.

> Sedan skulle det vara kul om du kunde visa hur CONVERT funktionen skulle lösa samma funktionalitet som exemplet.

Till att börja med så kan du ju med CONVERT ange flera olika stilar av datum, och i princip få ut alla varianter av datumformat man kan tänkas behöva. Visst, man kan inte få det i vilket oändligt format som helst, men jag har aldrig sett ett behov av något annat format än de man får med CONVERT. Sen skrev jag inte att CONVERT kunde göra allt funktionen kan, jag skrev att man kan göra det med bl a CONVERT, tillsammans med andra funktioner (t ex replace som du använder). Det viktiga i sammanhanget är återigen att jag inte använder kod som utförs rad-för-rad.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
5 746
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies