2015-10-30 32 views
7

Chạy hai đơn giản câu chọn:Tại sao sử dụng left() trên getdate() thay đổi nó thành một kiểu dữ liệu khác?

SELECT GETDATE() 

SELECT LEFT(GETDATE(), 10) 

Returns:

2015-10-30 14:19:56.697 

Oct 30 201 

tôi đã mong LEFT() để cho tôi 2015-10-30, nhưng thay vào đó nó không.

Có ai biết tại sao không? Nó có liên quan đến kiểu dữ liệu GETDATE không?

Cảm ơn!

+0

tôi sẽ mong đợi nó để ném một ngoại lệ phải trung thực. Hàm LEFT là một hàm chuỗi nên rõ ràng là có một chuyển đổi ngầm xảy ra ở đây. –

+0

Tôi hiểu điều này có thể không phải là điểm của câu hỏi, nhưng nếu bạn muốn chỉ ngày, bạn có thể sử dụng 'chuyển đổi (ngày, getdate())' –

+0

Hoặc trong SQL Server ** 2012 ** và mới hơn, bạn có thể sử dụng 'SELECT FORMAT (SYSDATETIME(), 'yyyy-MM-dd');' để nhận ** chính xác ** những gì bạn cần .... –

Trả lời

9

GETDATE() trả về giá trị datetime. Khi bạn thực hiện SELECT GETDATE(), thì ứng dụng sẽ nhận được giá trị ngày giờ và tìm cách hiển thị nó. Ứng dụng bạn đang sử dụng là lựa chọn một cách khôn ngoan định dạng chuẩn ISO.

Khi bạn làm LEFT(GETDATE(), thì cơ sở dữ liệu cần thực hiện chuyển đổi ẩn từ datetime thành giá trị chuỗi. Đối với điều này, nó sử dụng các thiết lập quốc tế hóa của nó. Những gì bạn đang nhìn thấy được dựa trên các cài đặt này.

Đạo đức của câu chuyện: tránh chuyển đổi tiềm ẩn. Luôn luôn rõ ràng về những gì bạn đang làm, đặc biệt là trong SQL có khả năng chẩn đoán khá kém. Vì vậy, hãy sử dụng CONVERT() với định dạng thích hợp cho những gì bạn muốn làm.

+2

https://msdn.microsoft.com/en-AU/library/ms187928.aspx cho biết chuyển đổi mặc định là 0 chứ không phải là cài đặt quốc tế hóa –

+1

Không nên có nhận xét ở vị trí nắm tay :) Câu trả lời hay. –

+1

@ Nick.McDermaid. . . Tôi sẽ giới thiệu bạn tới cuộc thảo luận của Aaron Bertrand về chủ đề này: http://stackoverflow.com/questions/10398921/how-does-sql-server-decide-format-for-implicit-datetime-conversion. –

0

GETDATE() lệnh trả về một DATETIME, bạn muốn quay trở lại NGÀY

SELECT CONVERT(DATE,GETDATE()); 
Các vấn đề liên quan