2011-05-19 14 views

उत्तर

5

मुझे यह प्रश्न पसंद है!

DECLARE @input float = 1.5; 

DECLARE @hour int = FLOOR(@input); 
DECLARE @minutes int = (SELECT (@input - FLOOR(@input)) * 60); 

SELECT RIGHT('00' + CONVERT(varchar(2), @hour), 2) + ':' + RIGHT('00' + CONVERT(varchar(2), @minutes), 2); 
+0

अच्छा काम करता है बहुत बहुत शुक्रिया – maxy56

2
SELECT SUBSTRING(CONVERT(NVARCHAR, DATEADD(MINUTE, 1.5*60, ''), 108), 1, 5) 

यह द्वारा काम करता है:

  • "शून्य" तारीख

  • 1,5 x 60 मिनट (यानी 1.5 घंटे)

  • स्वरूपण जोड़ने से शुरू परिणाम एक समय के रूप में, एचएच: मिमी: एसएस (यानी प्रारूप "108")

  • सेकंड हिस्सा

यह बजाय 1.5 x 60 मिनट 1.5 घंटे का उपयोग करने के लिए आवश्यक है DATEADD समारोह ट्रंकेटस के रूप में निकटतम पूर्णांक तक भरपाई बंद ट्रिमिंग। यदि आप उच्च-रिज़ॉल्यूशन ऑफ़सेट चाहते हैं, तो आप इसके बजाय SECOND का उपयोग कर सकते हैं, उपयुक्त स्केल (उदा। घंटे * 60 * 60)।

+1

यह नरक के रूप में सेक्सी है! अच्छा उत्तर! – Yuck

+0

काम नहीं करेगा जब 'फ्लोट' मान 24 से अधिक या बराबर होगा। आपको 24 घंटे का समय मिल जाएगा (उदाहरण के लिए यदि एक्स 35.0 है, तो आपको' 35: 00' नहीं मिलेगा लेकिन '11:00 '(35 मॉड्यूल 24) –

+0

@ निकोलस - मैं, और मैं @WReach भी मान रहा हूं, एक मान्य इनपुट मान रहा था। हालांकि एक सुरक्षित संस्करण बनाने के लिए चीयर्स। – Yuck

2

निश्चित रूप से। आराम से, लेकिन वास्तव में नहीं ... सीधा:

declare @hours float 
set  @hours = -9.8 

select substring('- ',2+convert(int,sign(@hours)),1)          -- sign 
    + right('00' + convert(varchar,      floor(abs(@hours)))   , 2) -- hours component 
    + ':'                     -- delimiter 
    + right('00' + convert(varchar,round(60*(abs(@hours)-floor(abs(@hours))) , 0)) , 2) -- minutes 

एक अन्य विकल्प है कि सही परिणाम दे देंगे। आपको इसे मिनटों में ट्विक करने की आवश्यकता हो सकती है और यह सुनिश्चित करने के लिए कि दोनों फ़ील्ड 2 अंकों चौड़े हैं।

declare @hours float 
set  @hours = -9.8 

select  convert(varchar, datediff(minute,dateadd(minute,@hours*60,convert(datetime,'')),'')/60) 
    + ':' + convert(varchar, datediff(minute,dateadd(minute,@hours*60,convert(datetime,'')),'') % 60) 
2
WITH m AS 
    SELECT Minutes = CAST(@hours * 60 AS int) 
) 
SELECT CAST(Minutes/60 AS varchar) + ':' + RIGHT(100 + Minutes % 60, 2) 
FROM m 
-1
select dateadd(MINUTE, cast((8.18 % 1) * 60 as int), dateadd(hour, cast(8.18 as int), convert(varchar(10), getdate(), 10))) 
संबंधित मुद्दे