Antworten:
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
Die obige Abfrage gibt einen Datum / Uhrzeit-Wert für Mitternacht Anfang Dezember 31 an. Dies ist ungefähr 24 Stunden vor dem letzten Moment des Jahres. Wenn Sie die Zeit einbeziehen möchten, die möglicherweise am 31. Dezember auftritt, sollten Sie mit einem <
Vergleich mit dem ersten des nächsten Jahres vergleichen. Oder Sie können mit den letzten Millisekunden des laufenden Jahres vergleichen, aber dies lässt immer noch eine Lücke, wenn Sie etwas anderes als DATETIME (wie DATETIME2) verwenden:
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear
Technische Details
Dies funktioniert, indem die Anzahl der Jahre seit 1900 mit ermittelt DATEDIFF(yy, 0, GETDATE())
und dann zu einem Datum von Null = 1. Januar 1900 addiert wird. Dies kann geändert werden, um für ein beliebiges Datum zu arbeiten, indem der GETDATE()
Teil oder ein beliebiges Jahr durch Ersetzen der DATEDIFF(...)
Funktion durch ersetzt wird "Jahr - 1900."
SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
Hier ist ein ziemlich einfacher Weg;
SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';
Es ist nicht sexy, aber es funktioniert.
Sie können das aktuelle Jahr mit der DATEPART
Funktion ab dem aktuellen Datum abrufen, das Sie mit erhalten habengetUTCDate()
SELECT
'01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
'31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
DATETIME
anstelle eines Strings bekommen kann und offensichtlich stimmt das möglicherweise nicht mit der erwarteten Ausgabe gemäß der Frage überein.
yyyyMMdd
ist eindeutig.
schreibe einfach: -
select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))
Startdatum des Jahres.
select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))
Jedes Jahr hat das 1. als erstes Datum und das 31. als letztes Datum. Sie müssen nur das Jahr an diesen Tag und Monat anhängen, zum Beispiel: -
SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
'12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]
Um den ersten und den letzten Tag des Jahres zu erhalten, kann man die CONCAT
Funktion verwenden. Der resultierende Wert kann in einen beliebigen Typ umgewandelt werden.
CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
Zum Startdatum des laufenden Jahres:
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
Für das Enddatum des laufenden Jahres:
SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
Ein anderer Weg: (seit SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
Schauen Sie sich dieses an:
select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear,
convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
Es sieht so aus, als ob Sie daran interessiert sind, eine Operation für ein bestimmtes Jahr durchzuführen. Wenn dies tatsächlich der Fall ist, würde ich empfehlen, die Funktion YEAR () wie folgt zu verwenden :
SELECT * FROM `table` WHERE YEAR(date_column) = '2012';
Gleiches gilt für DAY () und MONTH () . Sie sind auch für MySQL / MariaDB-Varianten verfügbar und wurden in SQL Server 2008 eingeführt (also nicht für bestimmte 2000).
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual
In Microsoft SQL Server (T-SQL) kann dies wie folgt erfolgen
--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
CURRENT_TIMESTAMP - Gibt das SQL Server-Datum zum Zeitpunkt der Ausführung der Abfrage zurück.
JAHR - Ruft den Jahresteil des aktuellen Zeitstempels ab.
STR , LTRIM - Diese beiden Funktionen werden angewendet, damit wir sie in einen Varchar umwandeln können, der mit unserem gewünschten Präfix verknüpft werden kann (in diesem Fall ist es entweder das erste Datum des Jahres oder das letzte Datum des Jahres). Aus irgendeinem Grund hat das von der YEAR- Funktion generierte Ergebnis vorangestellte Leerzeichen. Um sie zu beheben, verwenden wir die LTRIM- Funktion, die links getrimmt ist.
Wenn es den 1. Januar erreicht, könnte es sein, dass es noch das Datum des letzten Jahres ist.
select
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEadd(day, -1,getdate())), 0), 103 ) AS StartOfYear,
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEDIFF(day, -1,getdate()))+1, -1), 103 )AS EndOfYear
Versuche dies:
DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')
Msg 195, Level 15, State 10, Line 1 'NOW' is not a recognized function name.
--- Lalmuni Demos ---
create table Users
(
userid int,date_of_birth date
)
--- Werte einfügen ---
insert into Users values(4,'9/10/1991')
select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years,
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months,
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users