Chuyển đổi ngày giờ của SQL Server sang định dạng ngày ngắn hơn


82

Tôi có một datetimecột trong SQL Server cung cấp cho tôi dữ liệu như thế này 10/27/2010 12:57:49 pmvà tôi muốn truy vấn cột này nhưng chỉ có SQL Server trả về ngày tháng và năm - ví dụ: 2010 10 27hoặc điều tương tự.

Các chức năng tôi nên nghiên cứu là gì?

Tôi có nên chuyển đổi sang kiểu dữ liệu ngày tháng khác không? Hay chỉ đơn giản là chuyển đổi nó thành một chuỗi?


2
Hãy xem bài viết này: msdn.microsoft.com/en-us/library/ms187928.aspx Cụ> Date and Time Styles
Brissles

6
Những phiên bản của SQL Server ?? SQL Server 2008 đã giới thiệu một loạt các kiểu dữ liệu liên quan đến ngày và giờ mới, ví dụ DATE- vì vậy nếu bạn đang sử dụng năm 2008, bạn có thể sử dụng SELECT CAST(YourDateTimeColumn AS DATE)và chỉ lấy lại ngày - không có phần thời gian.
marc_s


Câu trả lời:


121

Hãy xem CONVERT . Tham số thứ 3 là kiểu ngày giờ bạn muốn chuyển đổi sang.

ví dụ

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

12
Có vẻ như 106 là "dd mon yy" và "dd / MM / yyyy" là 103
nahab

3
@nahab Bạn nói đúng. Ngoài ra, tôi đã phải sử dụng varchar (11) thay vì varchar (10) để ngăn chặn năm để được rút ngắn (. Ví dụ như tôi thấy 195 thay vì 1953)
Henrov

6
Ngoài ra, bạn có thể sử dụng 101 nếu bạn muốn kết quả được định dạng mm / dd / yyyy
iliketocode

57

Thử đi:

print cast(getdate() as date )


5
Tôi thích tùy chọn này hơn câu trả lời được chấp nhận. Nó để cột ở định dạng Ngày tháng để 'order by' của tôi hoạt động chính xác thay vì chỉ là một varchar.
Milne

2
Điều này không hoạt động trên SQL Server 2005 trở về trước. Kiểu dữ liệu DATE đã được giới thiệu với SQL 2008.
JerryOL

Như đã nêu ở trên, thực sự là tốt để có được kiểu dữ liệu ngày tháng, nhưng khi một định dạng cụ thể được mong đợi (như "dd MM yyyy") thì cần nhiều hơn thế.
trincot

15

Nếu bạn cần kết quả ở định dạng ngày, bạn có thể sử dụng:

Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

10

Ngoài CAST và CONVERT, nếu bạn đang sử dụng Sql Server 2008, bạn có thể chuyển đổi sang kiểu ngày tháng (hoặc sử dụng kiểu đó để bắt đầu), sau đó tùy chọn chuyển đổi lại thành varchar:

declare @myDate date
set @myDate = getdate()
print cast(@myDate as varchar(10))

đầu ra:

2012-01-17

6

Với SQL Server 2005, tôi sẽ sử dụng cái này:

select replace(convert(char(10),getdate(),102),'.',' ')

Kết quả: 2015 03 05


5

Nếu bạn có trường datetime cho kết quả như thế này 2018-03-30 08: 43: 28.177

Đề xuất: và bạn muốn thay đổi datetime để ngày để xuất hiện như 2018/03/30

cast(YourDateField as Date)

1
bạn chưa thêm bất cứ điều gì mới, jabu.hlong đã đưa ra câu trả lời này 4 năm trước ...
Pawel Czapski

Nó không được đảm bảo rằng ngày sẽ được hiển thị theo định dạng của OP. Nó có thể là yyyy-MM-dd, dd / MM / yyyy, dd / MM / yyyy 00:00:00 hoặc vẫn là một cái gì đó khác.
trincot 27/12/18

4

Định dạng ngày ngắn nhất của mm / dd / yy có thể nhận được bằng:

Select Convert(varchar(8),getdate(),1)

0

Chỉ cần thêm từ khóa ngày. Ví dụ: chọn ngày (ngày đặt hàng), đếm (1) từ các đơn hàng trong đó ngày đặt hàng> '2014-10-01' nhóm theo ngày (ngày đặt hàng);

orderdate là trong thời gian ngày. Truy vấn này sẽ hiển thị các đơn đặt hàng cho ngày đó thay vì ngày giờ.

Từ khóa ngày được áp dụng trên cột ngày giờ sẽ thay đổi nó thành ngày ngắn.


0

Đối với bất kỳ phiên bản nào của SQL Server: dateadd (dd, dateiff (dd, 0, getdate ()), 0)


Nó không được đảm bảo rằng ngày sẽ được hiển thị theo định dạng của OP. Nó có thể là yyyy-MM-dd, dd / MM / yyyy, dd / MM / yyyy 00:00:00 hoặc vẫn là một cái gì đó khác.
trincot

0

Trường DateTime ban đầu: [_Date_Time]

Đã chuyển đổi thành Shortdate: 'Short_Date'

CONVERT(date, [_Date_Time]) AS 'Short_Date'

Điều này trả về một kiểu dữ liệu ngày sẽ được để lại cho giao diện để hiển thị dưới dạng một chuỗi, vì vậy nó có thể tạo ra "27/12/2018 00:00:00". Đó không phải là những gì OP yêu cầu.
trincot

Đây là những gì anh ấy muốn đạt được - dd / MM / yyyy; và đây là những gì câu trả lời của tôi tạo ra 2018-11-20
Yousef Albakoush

Trước hết, 2018-11-20 không phải là dd / MM / yyyy mà là yyyy-MM-dd. Nhưng kết xuất thực sự phụ thuộc vào hệ thống (và ngôn ngữ). Trên hệ thống của tôi, nó cũng tạo ra giờ, phút và giây (tất cả đều bằng không). Điều này là do bạn đã không cho SQL biết ngày nên được biểu diễn như thế nào dưới dạng chuỗi và OP cần một định dạng chuỗi chính xác.
trincot

Thứ nhất, 2018-11-20 là do PC của tôi được định cấu hình để sử dụng ngôn ngữ Ả Rập; Thứ hai, tôi sẽ thử nó sau khi thay đổi ngày ngắn trong PC của mình
Yousef Albakoush 27/12/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.