2010-07-11 20 views
5

मैं यह फ़ंक्शन एक डेटाटाइम लेने और दशमलव के रूप में व्यक्त किए गए समय को वापस करने के लिए चाहता हूं। E.G. - 2:33 PM पर 14,55यह फ़ंक्शन दशमलव क्यों नहीं लौटाता है?

ALTER FUNCTION [dbo].[GetTimeAsDecimal](
@DateTime as datetime 
) RETURNS decimal 
AS 
BEGIN 
DECLARE @hour decimal 
DECLARE @min decimal 
DECLARE @result decimal 
SELECT @hour = DATEPART(HOUR, @DateTime) 
SELECT @min = (DATEPART(MINUTE, @DateTime)/60.0) 
SELECT @result = @hour + @min 
RETURN @result 
END 

ऐसा ही एक क्वेरी अपेक्षित परिणाम का उत्पादन के रूप में वापस कर दी जाएगी ...

SELECT DATEPART(HOUR, getDate()) + (DATEPART(MINUTE, getDate())/60.0) 
+0

2:33 का अनुवाद 14.55 (33/60 = 0.55) के रूप में नहीं है? साथ ही, यदि समान क्वेरी काम करती है, तो इसका उपयोग क्यों न करें? – LittleBobbyTables

+0

हाँ, वह बिट एक टाइपो था। यह सही है। क्या मुझे वास्तव में आपको बताने की ज़रूरत है कि मैं एक समारोह क्यों करना पसंद करूंगा? –

+0

नहीं, मुझे नहीं लगता :) – LittleBobbyTables

उत्तर

12

यह decimal लौटाता है - लेकिन चूंकि आपने सटीकता और स्केल निर्दिष्ट नहीं किया है, इसलिए यह 0 के दशमलव (दशमलव बिंदु के बाद अंकों की संख्या) के लिए डिफ़ॉल्ट है ...... तो y कहां दशमलव बिंदु के बाद किसी भी अंक के बिना दशमलव प्राप्त करें ... (इसलिए यह गोल हो जाएगा और ऐसा लगता है कि यह वास्तव में दशमलव नहीं है - यह है)।

आपको decimal के लिए अपनी सभी परिभाषाओं को बदलने की आवश्यकता है में एक पैमाने शामिल है! कुछ decimal(18,4) या कुछ की तरह।

decimal(18,4) की एक परिभाषा का अर्थ है:

  • 18 अंक की कुल जिनमें से
  • 4 अंक दशमलव बिंदु (और इस प्रकार 14 से पहले) के बाद कर रहे हैं

डिफ़ॉल्ट - अगर आप कुछ और निर्दिष्ट नहीं करते हैं - decimal = decimal(18,0)

+0

भयानक। आप से बहुत ज्यादा –

2

इस प्रकार अपने घोषणाओं को बदलने का प्रयास करें:

DECLARE @hour decimal(4,2) 
DECLARE @min decimal(4,2) 
DECLARE @result decimal(4,2) 
+0

और इस बिट ने सौदा बंद कर दिया। धन्यवाद। साथ ... ALTER फंक्शन [dbo]। [GetTimeAsDecimal] ( datetime रूप @DateTime) दशमलव रिटर्न समाप्त हो गया (18,2) के रूप में शुरू रिटर्न कास्ट (कास्ट ((DatePart (घंटा, @DateTime) /1.0) दशमलव (18,2)) + CAST ((DATEPART (MINUTE, @DateTime) /60.0) दशमलव (18,2)) दशमलव के रूप में (18,2)) END –

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