2010-09-01 12 views
8

मुझे डेटाटाइम फ़ील्ड को विशेष रूप से स्वरूपित INT प्रकार में कनवर्ट करने की आवश्यकता है। उदाहरण के लिए, मुझे 20010101 में कनवर्ट करने के लिए 2000-01-01 00:00:00.000 चाहिए।डेटटाइम से इंट प्रारूप में कनवर्ट करने के लिए सबसे अधिक प्रभावी तरीका

किसी प्रश्न में तुलना के लिए उस रूपांतरण को करने का सबसे प्रभावी तरीका क्या है?

कुछ की तरह:

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

या

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

यह करने के लिए सबसे शक्तिशाली तरीका क्या है?

+2

सरल जवाब: दोनों का परीक्षण और देखें कि कौन है "बेहतर" (जैसे तेज, कम CPU, का उपयोग करता है कम पढ़ता/लिखता है का उपयोग करता है आदि) –

+2

है कैसे 01 जनवरी 2000 हो जाता है "20,100,101" कृपया? – gbn

+0

ओह, जब मैं एक टाइपो बनाते हैं। :) – DavidStein

उत्तर

19

cast(convert(char(8), orderdate, 112) as int) का आपका उदाहरण मेरे लिए ठीक लग रहा है है। यह आपको जितनी जल्दी आवश्यक प्रारूप में तारीख को नीचे ले जाता है और एक int में परिवर्तित हो जाता है।

निष्पादन योजना दृष्टिकोण से, दोनों के बीच कोई अंतर नहीं लगता है।

-1

इस आपको क्या चाहिए

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

यह 'कास्ट (कन्वर्ट (चार), ऑर्डरडेट, 112) int के रूप में बहुत अधिक काम है), जो भी काम करेगा। आपका उदाहरण किसी आईएनटी को खाते में परिवर्तित नहीं करता है। – LittleBobbyTables

-2

जब आप सीधे अपने कोड में '2010-01-01 00: 00: 00.000' पास करते हैं, तो SELECT कथन इसे स्ट्रिंग के रूप में देखता है और डेटाटाइम डेटा प्रकार नहीं। यह सीधे डेटाटाइम फ़ील्ड का चयन करने जैसा नहीं है।

बाहरी CAST करने की कोई आवश्यकता नहीं है क्योंकि SQL सर्वर निहित रूपांतरण करेगा, यहां एक सबूत है।

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

शायद आप जो भी संदर्भित करते हैं वह है 'चयन कनवर्ट (आईएनटी, सीएएसटी (' 2013-08-05 09:23:30 'DATETIME के ​​रूप में))' यहां से आता है [https://msdn.microsoft.com/en -us/लाइब्रेरी/ms187928.aspx) रूपांतरण ** निहित ** है – DanielV

संबंधित मुद्दे