Một số hàm xử lý ngày (date) trong sql server
GETDATE()
Select GETDATE() as 'Ngay hom nay'
MONTH( GETDATE())
Select MONTH( GETDATE()) as 'Thang nay la'
Select GioVao,GioRa,GioVao
,DATEDIFF(hour,GioVao,GioRa) as Gio
,DATEDIFF(minute,GioVao,GioRa) as phut
From tbChungTu
--How to determine the number of days in a month in SQL Server
DECLARE @date DATETIME
SET @date = GETDATE()
-- Cách 1
select datediff(day, dateadd(day, 1-day(@date), @date),
dateadd(month, 1, dateadd(day, 1-day(@date), @date)))
-- Cách 2
select DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,@DATE),0)))
Viết ra 1 function getDaysInMonth sql server
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
-- select [dbo].[getDaysInMonth ](2024,4)
ALTER FUNCTION [dbo].[getDaysInMonth ]
(
-- Add the parameters for the function here
@Month int
, @Year int
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @kq int
DECLARE @date DATETIME
set @date =Cast(@Year as nvarchar(4)) + '-' + Cast(@Month as nvarchar(4)) + '-1'
select @kq=DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,@DATE),0)))
return @kq
END
-- Giả sử ngày hiện tại là '2025-08-04'
-- Lấy ngày đầu tháng
SELECT DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) AS NgayDauThang;
-- Kết quả: 2025-08-01
-- Lấy ngày cuối tháng
SELECT EOMONTH(GETDATE()) AS NgayCuoiThang;
-- Kết quả: 2025-08-31
DECLARE @Ngay DateTime
Set @Ngay=getDate()
select DATEADD(day, -1, @Ngay)
Có 2 hàm chính trong SQL Server để định dạng ngày tháng và thời gian, mỗi hàm có ưu điểm và cách sử dụng riêng.
FORMAT() là hàm hiện đại và linh hoạt nhất, được giới thiệu từ SQL Server 2012. Nó cho phép bạn định dạng ngày tháng bằng cách sử dụng các chuỗi định dạng .NET và thậm chí hỗ trợ các định dạng theo vùng văn hóa (culture).
Cú pháp SQL:
FORMAT(giá_trị, định_dạng [, văn_hóa])
giá_trị: Giá trị ngày tháng cần định dạng (ví dụ: GETDATE()).
định_dạng: Một chuỗi định dạng .NET (ví dụ: 'yyyy-MM-dd', 'dd/MM/yyyy').
văn_hóa: (Tùy chọn) Mã vùng văn hóa (ví dụ: 'vi-VN' cho tiếng Việt, 'en-US' cho tiếng Anh).
Ví dụ SQL:
-- Định dạng ngày hiện tại theo kiểu yyyy-MM-dd
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd');
-- Kết quả: 2025-08-04
-- Định dạng ngày hiện tại theo kiểu dd/MM/yyyy
SELECT FORMAT(GETDATE(), 'dd/MM/yyyy');
-- Kết quả: 04/08/2025
-- Định dạng ngày hiện tại với cả thời gian
SELECT FORMAT(GETDATE(), 'dd/MM/yyyy HH:mm:ss');
-- Kết quả: 04/08/2025 10:40:00
-- Định dạng với tên thứ và tháng bằng tiếng Việt
SELECT FORMAT(GETDATE(), 'dddd, dd MMMM yyyy', 'vi-VN');
-- Kết quả: Thứ Hai, 04 Tháng Tám 2025
CONVERT() là hàm truyền thống và rất mạnh mẽ để chuyển đổi kiểu dữ liệu. Nó cho phép định dạng ngày tháng bằng cách sử dụng các mã định dạng số.
Cú pháp SQL:
CONVERT(kiểu_dữ_liệu, biểu_thức [, mã_định_dạng])
kiểu_dữ_liệu: Kiểu dữ liệu đích, thường là varchar hoặc nvarchar.
biểu_thức: Giá trị ngày tháng cần chuyển đổi.
mã_định_dạng: Một số nguyên xác định định dạng.
Ví dụ với các mã định dạng phổ biến:
Mã Định dạng đầu ra Ví dụ
101 MM/dd/yyyy 08/04/2025
103 dd/MM/yyyy 04/08/2025
112 yyyyMMdd 20250804
120 yyyy-MM-dd hh:mm:ss 2025-08-04 10:40:00
23 yyyy-MM-dd 2025-08-04
Ví dụ SQL:
-- Định dạng ngày hiện tại theo kiểu dd/MM/yyyy
SELECT CONVERT(varchar, GETDATE(), 103);
-- Kết quả: 04/08/2025
-- Định dạng ngày hiện tại theo kiểu yyyy-MM-dd hh:mm:ss
SELECT CONVERT(varchar, GETDATE(), 120);
-- Kết quả: 2025-08-04 10:40:00
Một số hàm ngày SQL Server hay sử dụng trong làm phần mềm