sql >> Database teknologi >  >> RDS >> Sqlserver

Brugerdefineret dato/klokkeslæt formatering i SQL Server

Brug DATENAME og pak logikken ind i en funktion, ikke en lagret proc

declare @myTime as DateTime

set @myTime = GETDATE()

select @myTime

select DATENAME(day, @myTime) + SUBSTRING(UPPER(DATENAME(month, @myTime)), 0,4)
 

Returnerer "14OCT"

Prøv ikke at bruge nogen tegn-/strengbaserede operationer, hvis det er muligt, når du arbejder med datoer. De er numeriske (en float), og ydeevnen vil lide under disse datatypekonverteringer.

Grav disse praktiske konverteringer, jeg har kompileret gennem årene...

/* Common date functions */ --//This contains common date functions for MSSQL server /*Getting Parts of a DateTime*/ --//gets the date only, 20x faster than using Convert/Cast to varchar --//this has been especially useful for JOINS SELECT (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)) --//gets the time only (date portion is '1900-01-01' and is considered the "0 time" of dates in MSSQL, even with the datatype min value of 01/01/1753. SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime))) /*Relative Dates*/ --//These are all functions that will calculate a date relative to the current date and time /*Current Day*/ --//now SELECT (GETDATE()) --//midnight of today SELECT (DATEADD(ms,-4,(DATEADD(dd,DATEDIFF(dd,0,GETDATE()) + 1,0)))) --//Current Hour SELECT DATEADD(hh,DATEPART(hh,GETDATE()),CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DateTime)) --//Current Half-Hour - if its 9:36, this will show 9:30 SELECT DATEADD(mi,((DATEDIFF(mi,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) as DateTime)), GETDATE())) / 30) * 30,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) as DateTime))) /*Yearly*/ --//first datetime of the current year SELECT (DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)) --//last datetime of the current year SELECT (DATEADD(ms,-4,(DATEADD(yy,DATEDIFF(yy,0,GETDATE()) + 1,0)))) /*Monthly*/ --//first datetime of current month SELECT (DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) --//last datetime of the current month SELECT (DATEADD(ms,-4,DATEADD(mm,1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)))) --//first datetime of the previous month SELECT (DATEADD(mm,DATEDIFF(mm,0,GETDATE()) -1,0)) --//last datetime of the previous month SELECT (DATEADD(ms, -4,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0))) /*Weekly*/ --//previous monday at 12AM SELECT (DATEADD(wk,DATEDIFF(wk,0,GETDATE()) -1 ,0)) --//previous friday at 11:59:59 PM SELECT (DATEADD(ms,-4,DATEADD(dd,5,DATEADD(wk,DATEDIFF(wk,0,GETDATE()) -1 ,0)))) /*Quarterly*/ --//first datetime of current quarter SELECT (DATEADD(qq,DATEDIFF(qq,0,GETDATE()),0)) --//last datetime of current quarter SELECT (DATEADD(ms,-4,DATEADD(qq,DATEDIFF(qq,0,GETDATE()) + 1,0)))

  1. Støb ind til varchar

  2. SET versus SELECT ved tildeling af variable?

  3. Ampersand (&) operator i en SQL Server WHERE-klausul

  4. Hvordan bruger man MySQLDB SScursor effektivt?