2010-09-01 47 views
8

Tôi cần chuyển đổi trường ngày giờ thành kiểu INT được định dạng cụ thể. Ví dụ: tôi muốn 2000-01-01 00:00:00.000 để chuyển đổi thành 20010101.Cách thực hiện nhiều nhất để chuyển đổi định dạng ngày giờ sang định dạng Int

Cách hiệu quả nhất để thực hiện chuyển đổi đó để so sánh trong truy vấn là gì?

Cái gì như:

DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 + 
    DATEPART(day, orderdate) 

hoặc

cast(convert(char(8), orderdate, 112) as int) 

cách performant nhất để làm điều này là gì?

+2

câu trả lời đơn giản: kiểm tra cả hai và xem đó là "tốt hơn" (ví dụ nhanh hơn, sử dụng ít CPU, sử dụng ít lần đọc/viết, vv) –

+2

Làm thế nào để ngày 01 tháng 1 năm 2000 trở thành "20.100.101" xin vui lòng? – gbn

+0

Rất tiếc, khi tôi tạo lỗi đánh máy. :) – DavidStein

Trả lời

19

dụ bạn của cast(convert(char(8), orderdate, 112) as int) có vẻ tốt đẹp đối với tôi. Nó nhanh chóng nhận được ngày xuống đến định dạng bạn cần và chuyển đổi sang một int.

Từ quan điểm kế hoạch thực hiện, có vẻ như không có sự khác biệt giữa hai điểm.

-1

Đây có phải là những gì bạn cần

SELECT REPLACE(CONVERT(VARCHAR(10),'2010-01-01 00:00:00.000',101),'-','') 
+1

Đó là rất nhiều công việc hơn 'đúc (chuyển đổi (char (8), orderdate, 112) là int)', mà sẽ làm việc chỉ là tốt. Ví dụ của bạn thậm chí không chuyển đổi thành INT vào tài khoản. – LittleBobbyTables

-2

Khi bạn chuyển '2010-01-01 00: 00: 00.000' trực tiếp trong mã của bạn, câu lệnh SELECT xem xét nó như một chuỗi chứ không phải kiểu dữ liệu datetime. Nó không giống như chọn một trường datetime trực tiếp.

Không cần phải thực hiện CAST bên ngoài vì SQL Server sẽ thực hiện chuyển đổi ngầm, đây là bằng chứng.

DECLARE @t DATETIME = '2010-01-10 00:00:00.000',@u INT 
SELECT @u = CONVERT(CHAR(8), @t, 112) 

IF ISNUMERIC(@u) = 1 
PRINT 'Integer' 
+0

Có lẽ những gì bạn đề cập đến là 'SELECT CONVERT (INT, CAST (' 2013-08-05 09:23:30 'là DATETIME)) 'đến từ [ở đây] (https://msdn.microsoft.com/vi -us/library/ms187928.aspx) chuyển đổi là ** ngầm định ** – DanielV

Các vấn đề liên quan