2013-07-22 8 views
7

इसके साथ संघर्ष कर रहा है और सही जवाब नहीं मिल रहा है, हालांकि रूपांतरण के लिए बहुत सारे उल्लेख हैं, लेकिन कुछ भी विशिष्ट काम नहीं कर रहा है।दशमलव समय को घंटों और मिनटों में कनवर्ट करें

मुझे डेटा प्रकार के फ्लोट के साथ घंटों और मिनटों में एक समय बदलने की जरूरत है। तो 13.50 13.30 के रूप में। डीबी में फ्लोट के रूप में तय डेटा प्रकार इतना बदल नहीं सकता है। डीबी एसक्यूएल सर्वर 2008R2

की कोशिश की है:

cast(cast(floor(fdsViewTimesheet.perStandardHours) as  
float(2))+':'+cast(floor(100*( 
fdsViewTimesheet.perStandardHours - floor(fdsViewTimesheet.perStandardHours)))as 
float(2)) as time) AS STANDARD_HOURS 

लेकिन मैं त्रुटि संदेश "Explicit conversion from data type real to time is not allowed"as char बजाय as float की कोशिश की है लेकिन क्वेरी लटका मिलता है।

मैं क्या गलत कर रहा हूं? मैं बस want to convert a float value into hours and minutes। कोई आभारी होगा अगर कोई मुझे सही दिशा में इंगित कर सकता है।

उत्तर

2

इस के लिए आप

DECLARE @f [real] 
SET @f = 13.50 

SELECT DATEADD(mi, (@f - FLOOR(@f)) * 60, DATEADD(hh, FLOOR(@f), CAST ('00:00:00' AS TIME))) 
+0

यह कैसे काम जब फ़ील्ड नाम fdsViewTimesheet.perStandardHours का उपयोग कर चाहते हैं? 13.50 फ़ील्ड में डेटा का सिर्फ एक उदाहरण था fdsViewTimesheet.perStandardHours – user1022772

+0

बस ffViewTimesheet के साथ @f को प्रतिस्थापित करें।perStandardHours - काम किया गया :) –

+0

क्या आपके एसक्यूएल में '13 .50 '@f के प्रारूप का उदाहरण है? तो क्या मैं ffViewTimesheet.perStandardHours के साथ @f के सभी उदाहरणों को प्रतिस्थापित करूंगा और 13.50 रखूंगा? धन्यवाद – user1022772

1

काम करना चाहिए कैसे आप मिनटों में बदलने का और इतने की तरह 00:00 समय में जोड़ने के बारे में:

DECLARE @c datetime 
select @c = dateadd(mi,fdsViewTimesheet.perStandardHours*60,'00:00') 

आप के साथ बयान में यह करना चाहता था, तो केवल समय:

select CONVERT(TIME,dateadd(mi,fdsViewTimesheet.perStandardHours*60,'00:00') ) 

यदि आपके पास 24 घंटे से बड़े मान हैं, तो मानक डेटाटाइम और समय ty एसक्यूएल में पेस इन्हें पकड़ नहीं सकते हैं। वे 24 घंटे की रेंज रखने के लिए सीमित हैं।

select cast(floor(fdsViewTimesheet.perStandardHours) as varchar(10)) + ':' + cast(FLOOR((fdsViewTimesheet.perStandardHours - floor(fdsViewTimesheet.perStandardHours))*60)as varchar(2)) 
+0

कन्वर्ट महान काम करता है सिवाय इसके कि जब मेरे पास 24 घंटे से अधिक क्षेत्र है। 37.5 13.30 के रूप में काम किया जाता है? – user1022772

+1

आप 24 से अधिक घंटे स्टोर करने के लिए डेटाटाइम/टाइम डेटा प्रकारों का उपयोग नहीं कर सकते हैं। अगर आप अपने खुद के सूत्रों के साथ कैसे आना सीखना चाहते हैं तो कृपया इस आलेख पर एक नज़र डालें: http://www.sqlteam.com/article/working -साथ समय फैला और अवधियों में एसक्यूएल सर्वर –

2
DECLARE @f FLOAT = 13.5; 

SELECT CONVERT(TIME(0), DATEADD(MINUTE, 60*@f, 0)); 

या यदि आपने अभी एक स्ट्रिंग के रूप hh:mm हैं::

SELECT CONVERT(CHAR(5), DATEADD(MINUTE, 60*@f, 0), 108); 

बस सावधान रहना आपको क्या करने की आवश्यकता होगी तो जैसे उदाहरण के लिए एक स्ट्रिंग में समय प्रतिनिधित्व की दुकान है यदि आपके पास मूल्य हैं> = 24.

4

आप कोशिश कर सकते हैं:

DECLARE @HOURS decimal(7,4) = 20.5599 
SELECT CAST(CONVERT(VARCHAR,DATEADD(SECOND, @HOURS * 3600, 0),108) AS TIME) 

उत्पादन: 20:33:35

लेकिन याद रखें: केवल 24 घंटे

आप 24 घंटे से अधिक चाहते हैं के तहत MSSQL में टाइप समय, प्रयास करें:

DECLARE @HOURS decimal(7,4) = 25.5599 
SELECT 
RIGHT('0' + CAST (FLOOR(@HOURS) AS VARCHAR), 2) + ':' + 
RIGHT('0' + CAST(FLOOR((((@HOURS * 3600) % 3600)/60)) AS VARCHAR), 2) + ':' + 
RIGHT('0' + CAST (FLOOR((@HOURS * 3600) % 60) AS VARCHAR), 2) 

उत्पादन: 25:33: 35

- अद्यतन और अधिक से अधिक 24 घंटे

01,235,164 को

दशमलव मिनट

DECLARE @MINUTES decimal(7,4) = 77.9 
SELECT 
RIGHT('0' + CAST (FLOOR(COALESCE (@MINUTES, 0)/60) AS VARCHAR (8)), 2) + ':' + 
RIGHT('0' + CAST (FLOOR(COALESCE (@MINUTES, 0) % 60) AS VARCHAR (2)), 2) + ':' + 
RIGHT('0' + CAST (FLOOR((@MINUTES* 60) % 60) AS VARCHAR (2)), 2); 

उत्पादन: 01:17:54

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

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