Jawaban:
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
Kueri di atas memberikan nilai waktu tengah malam pada awal 31 Desember. Ini kurang dari 24 jam dari saat terakhir tahun ini. Jika Anda ingin memasukkan waktu yang mungkin terjadi pada 31 Desember, maka Anda harus membandingkan dengan tahun pertama tahun depan, dengan <
perbandingan. Atau Anda dapat membandingkan dengan beberapa milidetik terakhir pada tahun ini, tetapi ini masih menyisakan celah jika Anda menggunakan sesuatu selain DATETIME (seperti DATETIME2):
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
Detail Teknis
Ini bekerja dengan mencari tahu jumlah tahun sejak 1900 dengan DATEDIFF(yy, 0, GETDATE())
dan kemudian menambahkannya ke tanggal nol = Jan 1, 1900. Ini dapat diubah untuk bekerja untuk tanggal sewenang-wenang dengan mengganti GETDATE()
bagian atau tahun sewenang-wenang dengan mengganti DATEDIFF(...)
fungsi dengan "Tahun - 1900."
SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
Berikut cara yang cukup sederhana;
SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';
Itu tidak seksi, tapi berhasil.
Anda bisa mendapatkan tahun ini menggunakan DATEPART
fungsi, dari tanggal saat ini diperoleh dengan menggunakangetUTCDate()
SELECT
'01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
'31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
DATETIME
alih-alih string dan jelas itu mungkin tidak cocok dengan output yang diharapkan sesuai pertanyaan.
yyyyMMdd
tidak ambigu.
cukup tulis: -
select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))
tanggal mulai tahun ini.
select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))
Setiap tahun ada tanggal 1 sebagai tanggal 1 dan tanggal 31 sebagai tanggal terakhir yang harus Anda lakukan hanya melampirkan tahun pada hari dan bulan itu misalnya: -
SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
'12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]
Untuk mendapatkan hari pertama dan terakhir tahun ini, seseorang dapat menggunakan CONCAT
fungsinya. Nilai yang dihasilkan dapat diberikan ke semua jenis.
CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
Untuk tanggal mulai tahun ini:
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
Untuk tanggal akhir tahun ini:
SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
Cara lain: (Sejak SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
Lihat yang ini:
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)
Sepertinya Anda menarik dalam melakukan operasi semuanya untuk tahun tertentu, jika memang demikian, saya akan merekomendasikan untuk menggunakan fungsi YEAR () seperti ini:
SELECT * FROM `table` WHERE YEAR(date_column) = '2012';
Hal yang sama berlaku untuk DAY () dan MONTH () . Mereka juga tersedia untuk varian MySQL / MariaDB dan diperkenalkan di SQL Server 2008 (jadi tidak untuk 2000 tertentu).
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual
Di Microsoft SQL Server (T-SQL) ini dapat dilakukan sebagai berikut
--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
CURRENT_TIMESTAMP - mengembalikan tanggal sql server pada saat eksekusi kueri.
TAHUN - mendapatkan bagian tahun dari stempel waktu saat ini.
STR , LTRIM - kedua fungsi ini diterapkan sehingga kita dapat mengubahnya menjadi varchar yang dapat digabungkan dengan prefiks yang kita inginkan (dalam hal ini tanggal pertama atau tanggal terakhir tahun itu). Untuk alasan apa pun, hasil yang dihasilkan oleh fungsi YEAR memiliki spasi awalan. Untuk memperbaikinya kami menggunakan fungsi LTRIM yang merupakan trim kiri.
Jika mencapai tanggal 1 Jan Anda mungkin masih tanggal tahun terakhir.
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
Coba ini:
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.
--- Demo Lalmuni ---
create table Users
(
userid int,date_of_birth date
)
--- masukkan nilai ---
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