T-Sql إزالة العلامة العشرية من نوع بيانات المال

StackOverflow https://stackoverflow.com/questions/3894

سؤال

نظرًا للقيود المفروضة على استخدام T-Sql فقط في Sql Server 2005، هل هناك طريقة أفضل لإزالة العلامة العشرية من نوع بيانات المال بدلاً من التحويل إلى varchar (هنا ضمنيًا) ثم استبدال العلامة العشرية؟

وهنا ما لدي حاليا.

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

والذي يُرجع الرقم المطلوب 123 و1999، لكنني كنت أتساءل عما إذا كانت هناك طريقة أفضل.أي أفكار؟

هل كانت مفيدة؟

المحلول

اضرب في 100 ثم قم بالتحويل إلى int.

نصائح أخرى

يجب ألا تستخدم أبدًا نوع البيانات المالية لتخزين القيم النقدية.إذا قمت بأي حسابات سوف تحصل على نتائج مبتورة.قم بتشغيل ما يلي لمعرفة ما أعنيه

DECLARE
@mon1 MONEY,
@mon2 MONEY,
@mon3 MONEY,
@mon4 MONEY,
@num1 DECIMAL(19,4),
@num2 DECIMAL(19,4),
@num3 DECIMAL(19,4),
@num4 DECIMAL(19,4)

SELECT
@mon1 = 100, @mon2 = 339, @mon3 = 10000,
@num1 = 100, @num2 = 339, @num3 = 10000

SET @mon4 = @mon1/@mon2*@mon3
SET @num4 = @num1/@num2*@num3

SELECT @mon4 AS moneyresult,
@num4 AS numericresult

انتاج:2949.0000 2949.8525

هل يمكنك أن تكون أكثر تحديدًا بشأن حالة الاستخدام؟تعد إزالة العلامة العشرية من التمثيل أمرًا غير معتاد بعض الشيء نظرًا لأنك ستفقد جميع المعلومات المتعلقة بالمقياس.هل تفترض أنه سيكون هناك دائمًا رقمين؟إذا كان الأمر كذلك، يمكنك تبسيط الضرب في 100 ثم التقريب قبل التحويل إلى سلسلة.

ضع في اعتبارك أن نوع بيانات المال يمكن أن يحتوي على ما يصل إلى 4 أرقام بعد العلامة العشرية.قد لا تعمل القيم التي تحتوي على أكثر من رقمين كما هو متوقع للحل الأصلي أو لخدعة x100.

هنا هو السحر:

DataFormatString="{0:c0}

سيؤدي هذا إلى إزالة المنازل العشرية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top