2017-06-14 5 views
1

Ich hatte eine kurze Frage, wie T-SQL (MS-SQL) Datentypcasts behandelt. Ich habe diese zwei Abfragen, die die jeweiligen unten angegebenen Werte zurückgeben, aber ich wundere mich, warum das zweite so angezeigt wird. Wird der volle Wert tatsächlich erfasst? Der Datentyp der betreffenden Spalte ist ein Float. Sie brauchen nur diese zu vergleichen mit einer IF-Anweisung.MS-SQL-Typ Casting-Logik

Abfrage 1:

SELECT SUM ([CS_EQ_SHPD]) as CS_EQ_SHPD 
FROM [Supplies_DB].DBO.[ITEM] 
LEFT JOIN [Supplies_DB].DBO.[BU] 
ON BU_# = Business_Unit 
WHERE FISC_WEEK = '49' AND FY17_Market = 'Southeast' 

Rückgabewert: 2953432,88

Abfrage 2:

SELECT CAST(SUM ([CS_EQ_SHPD]) AS NVARCHAR(50)) as CS_EQ_SHPD 
FROM [Supplies_DB].DBO.[ITEM] 
LEFT JOIN [Supplies_DB].DBO.[BU] 
ON BU_# = Business_Unit 
WHERE FISC_WEEK = '49' AND FY17_Market = 'Southeast' 

Rückgabewert: 2.95343e + 006

+0

Bedeutung Sie wollen nicht die Notation, aber immer noch wollen den Wert als nvarchar (50) aber sieht aus wie 2953432.88? –

+0

Ja, aber ich bin neugierig, wie das im Hintergrund funktioniert. Wie macht es das, dass "e +" mit der letzten nicht-dezimalen Zahl beginnt, wenn 50 Zeichen mehr als genug sind, um den gesamten Gleitkommawert zu halten? –

+0

Was ist @@ Version? –

Antwort

1

Ich glaube, Sie werden die Notation ein 1MM sehen. (Ich mache ein wenig Forschung, nur weil ich jetzt interessiert bin)

Um jedoch Ihr Problem zu beheben, müssen Sie möglicherweise Format() verwenden. Dies würde eine variable Anzahl von Dezimalstellen ermöglichen. Die Anzahl der angezeigten Dezimalstellen wird in andere numerische Werte umgewandelt.

Format() hat einige nette Features, aber es ist nicht für seine Leistung bekannt

Beispiel

Declare @V float = 2953432.88 

Select AsFloat = @V 
     ,AsFormat = format(@V,'#.#########') -- Is a string but you can cast as nvarchar(50) 

Returns

AsFloat  AsFormat 
2953432.88 2953432.88 

Nun, wenn der Schwimmer Wert wurde nur 1 Dezimal

AsFloat  AsFormat 
2953432.8 2953432.8 
0

Ich würde vorschlagen (col als Geld) zu werfen

+0

Wenn der Float-Wert 2953432.8 wäre, würde das gecastete Geld 2953432.80 anzeigen ... Beachten Sie die letzte Dezimalzahl –

+0

Ja, ich könnte es formatieren, aber ich habe Hunderte von diesen Abfragen. –

0

können Sie dort auch FORMAT(Value, 'F2') wo 2 Maßstab ist

0

es konvertieren auch STR zu verwenden, funktioniert. Es ist interessant zu wissen, warum es auf wissenschaftliche Notation umschaltet, ich bin mir nicht sicher warum.

select LTRIM(STR(2953432.88,50,2))