क्या एमएस एसक्यूएल सर्वर 2008 में घंटों में फ्लोट नंबर को प्रारूपित करने का कोई आसान तरीका है?एसक्यूएल: फ्लोट संख्या घंटे प्रारूप प्रारूप
उदाहरण:
- 1,5 -> 01:30
- 9.8 -> 09:48
- 35.25 -> 35:15
धन्यवाद एक बहुत।
क्या एमएस एसक्यूएल सर्वर 2008 में घंटों में फ्लोट नंबर को प्रारूपित करने का कोई आसान तरीका है?एसक्यूएल: फ्लोट संख्या घंटे प्रारूप प्रारूप
उदाहरण:
धन्यवाद एक बहुत।
मुझे यह प्रश्न पसंद है!
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);
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)।
यह नरक के रूप में सेक्सी है! अच्छा उत्तर! – Yuck
काम नहीं करेगा जब 'फ्लोट' मान 24 से अधिक या बराबर होगा। आपको 24 घंटे का समय मिल जाएगा (उदाहरण के लिए यदि एक्स 35.0 है, तो आपको' 35: 00' नहीं मिलेगा लेकिन '11:00 '(35 मॉड्यूल 24) –
@ निकोलस - मैं, और मैं @WReach भी मान रहा हूं, एक मान्य इनपुट मान रहा था। हालांकि एक सुरक्षित संस्करण बनाने के लिए चीयर्स। – Yuck
निश्चित रूप से। आराम से, लेकिन वास्तव में नहीं ... सीधा:
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)
WITH m AS
SELECT Minutes = CAST(@hours * 60 AS int)
)
SELECT CAST(Minutes/60 AS varchar) + ':' + RIGHT(100 + Minutes % 60, 2)
FROM m
select dateadd(MINUTE, cast((8.18 % 1) * 60 as int), dateadd(hour, cast(8.18 as int), convert(varchar(10), getdate(), 10)))
अच्छा काम करता है बहुत बहुत शुक्रिया – maxy56