টি-এসকিউএল ব্যবহার করে দুটি পূর্ণসংখ্যার মানকে ভাগ করে কীভাবে ভাসমান ফলাফল পাবেন?


173

টি-এসকিউএল এবং মাইক্রোসফ্ট এসকিউএল সার্ভার ব্যবহার করে আমি 2 টি পূর্ণসংখ্যার সংখ্যার মধ্যে যেমন বিভাজন করি তখন দশমিক অঙ্কের সংখ্যা নির্দিষ্ট করতে চাই:

select 1/3

এটি বর্তমানে ফিরে আসে 0। আমি এটি ফিরে আসতে চাই 0,33

কিছুটা এইরকম:

select round(1/3, -2)

কিন্তু এটি কাজ করে না। আমি কীভাবে পছন্দসই ফলাফল অর্জন করতে পারি?


3
আপনি কি 1.0 / 3 চেষ্টা করেছেন?
থিলো

আমি যে উত্তর পেয়েছি তা যথেষ্ট চেয়ে বেশি
লাব্রাকা

উত্তর:


277

আপনি যদি ধ্রুবকটি সন্ধান করেন তবে stb এবং xiowl এর পরামর্শগুলি ঠিক আছে। যদি আপনাকে বিদ্যমান ক্ষেত্র বা পরামিতিগুলি ব্যবহার করতে হয় যা পূর্ণসংখ্যা হয় তবে আপনি এগুলি প্রথমে ভাসমান হতে পারেন:

SELECT CAST(1 AS float) / CAST(3 AS float)

অথবা

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

অথবা আপনি যদি দশমিক ফলাফল চান তবে আপনি এগুলিকে দশমিক হিসাবে কাস্ট করতে পারেন।
টিম

30
নির্বাচন 1.0 * MyInt1 / MyInt2
Troglo

মাইএসকিউএল ব্যবহারের জন্য @ decimal
ট্রাবলজিরো

অনেক ধন্যবাদ, আপনি আমার দিন বাঁচিয়েছেন। আমার CAST চেষ্টা করা হয়েছিল (7/3 AS ভাসমান) তবে আবার 2 এ ফিরে এসেছি। সুতরাং নিক্ষিপ্ত নম্বরগুলি আমার সমস্যার সমাধান করে।
ইয়াসিন ইয়ুরিক

3
উভয় লভ্যাংশ এবং ভাজক কাস্ট করার জন্য কোন প্রয়োজন নেই, @MS 'উত্তর দেখার stackoverflow.com/a/30639343/2866644
robotik

70

কারণ এসকিউএল সার্ভার পূর্ণসংখ্যা বিভাগ সম্পাদন করে। এটা চেষ্টা কর:

select 1 * 1.0 / 3

আপনি যখন প্যারাম হিসাবে পূর্ণসংখ্যার পাস করেন তখন এটি সহায়ক।

select x * 1.0 / y

1
এমনকি শূন্যগুলিও ছেড়ে দিতে পারেন।
জন

43

তাদের উভয়ই কাস্ট করা প্রয়োজন হয় না। বিভাগের জন্য ফলাফল ডেটাটাইপ সর্বদা উচ্চতর ডেটা টাইপের অগ্রাধিকার সহকারে হয় । সুতরাং সমাধানটি হতে হবে:

SELECT CAST(1 AS float) / 3

অথবা

SELECT 1 / CAST(3 AS float)


13

আমি বুঝি যে CASTকরতে ING FLOATমাইএসকিউএল অনুমোদিত নয় এবং আপনি করার প্রচেষ্টা করার সময় একটি ত্রুটি তুলবে CAST(1 AS float)যেমন বিবৃত মাইএসকিউএল দেব

এটির মত কাজটি সাধারণ a শুধু কর

(1 + 0.0)

তারপরে ROUNDএকটি নির্দিষ্ট সংখ্যক দশমিক স্থান অর্জন করতে ব্যবহার করুন

ROUND((1+0.0)/(2+0.0), 3)

উপরের এসকিউএল 1 টি 2 কে বিভক্ত করে এবং 3 টি দশমিক স্থানে ভাসমানটিকে ফিরিয়ে দেয়, যেমনটি হবে 0.500

CASTনিম্নলিখিত ধরণেরগুলির মধ্যে একটি হতে পারে: বাইনারি, চর, তারিখ, তারিখ সময়, দশমিক, জসন, এনসিআর, স্বাক্ষরিত, সময় এবং স্বাক্ষরবিহীন


3
মাইএসকিউএল অনুমতি দেয় CAST, এটি কেবল castালাইয়ের অনুমতি দেয় না FLOATDECIMALপরিবর্তে কাস্ট করুন। যেমন স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / tions7368১১63//২ দেখুন ।
মার্কাস্ক

7

দেখে মনে হচ্ছে এই কৌশলটি এসকিউএল সার্ভারে কাজ করে এবং স্বল্প হয় (পূর্ববর্তী উত্তরের ভিত্তিতে)

SELECT 1.0*MyInt1/MyInt2

বা:

SELECT (1.0*MyInt1)/MyInt2

2
আমি এটিকে সবচেয়ে পছন্দ করেছি, এটি শতাংশের গণনার জন্যও দুর্দান্ত দেখাচ্ছে:SELECT 100.0 * @Elapsed / @Total
এলি শেরার

3

এটা ব্যবহার কর

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

এখানে এই বর্গক্ষেত্রে প্রথমে ফ্লোটে রূপান্তর করুন বা ১.০০ দিয়ে গুণ করুন .এর আউটপুটটি একটি ভাসা সংখ্যা হবে e এখানে আমি 2 দশমিক স্থান বিবেচনা করি। আপনার যা প্রয়োজন তা চয়ন করতে পারেন।


2

আপনি যদি পূর্ণসংখ্যার মানটির সমাধান খুঁজতে এখানে (আমার মতোই) আসেন তবে উত্তরটি এখানে:

CAST(9/2 AS UNSIGNED)

রিটার্ন 5

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.