এসকিউএল - 2 দশমিক জায়গায় গোল করে


222

আমাকে কয়েক মিনিটে কয়েক ঘণ্টার মধ্যে রূপান্তর করতে হবে, ২ টি দশমিক স্থানে গোল করা হয়েছে I সুতরাং আমার কাছে যদি 650 হিসাবে মিনিট থাকে hen তারপরে ঘন্টা 10.83 হওয়া উচিত

আমার এখন পর্যন্ত যা আছে তা এখানে:

Select round(Minutes/60.0,2) from ....

তবে এই ক্ষেত্রে, যদি আমার মিনিট হয়, বলুন, 630 - ঘন্টা 10.5000000। তবে আমি এটি কেবলমাত্র 10.50 হিসাবে (গোল করার পরে) চাই। আমি কীভাবে এটি অর্জন করব?


3
আপনি কোন ডাটাবেস ইঞ্জিন ব্যবহার করছেন?
জ্যাক

1
যদি টি-এসকিউএল হয়, তবে এটি স্ট্যাকওভারফ্লো
প্রশ্নগুলি

উত্তর:


378

আপনি কি আপনার ফলাফল হিসাবে কাস্ট করতে পারেন না numeric(x,2)? কোথায়x <= 38

select 
    round(630/60.0,2), 
    cast(round(630/60.0,2) as numeric(36,2))

রিটার্নস

10.500000   10.50

8
স্ট্রেঞ্জ। SELECT ROUND(630/60.0, 2);আমাকে 10.50ইতিমধ্যে দেয়
জ্যাক

4
@ u07ch আপনি ইতিমধ্যে কোনও কাস্ট ব্যবহার করছেন তখন বৃত্তাকার () ব্যবহার করার উদ্দেশ্য কী?
রাম

16
@ র্যাম প্রশ্নটি স্কুয়েল সার্ভার ইঞ্জিনটি নির্দিষ্ট করে নি - যার কারণেই আমি নিজে থেকে বৃত্তাকার ভি কাস্টটি হাইলাইট করেছি। সংখ্যায় রূপান্তরটি সমস্ত ইঞ্জিনে গোল করে না তাই গণনা করা সংখ্যাটি যদি 10.809 হয় তবে আপনি প্রশ্নের প্রয়োজন 10.81 এর চেয়ে 10.80 পেয়ে যাবেন।
u07ch

1
@ u07ch বিস্তারিত উত্তরের জন্য ধন্যবাদ। এটা আমাকে সাহায্য করেছে।
রাম ২

8
cast(630/60.0 as numeric(36,2))enougth হয়10,50
মিস্টার HIDEn

78

এসকিউএল সার্ভার ২০১২-এর মতো, আপনি বিল্ট-ইন ফর্ম্যাট ফাংশনটি ব্যবহার করতে পারেন :

SELECT FORMAT(Minutes/60.0, 'N2')

(কেবলমাত্র আরও পড়ার জন্য ...)


2
নোট করুন যে এটি হাজার হাজার বিভাজককেও পরিচয় করে, যেমন1,757.47
8128

10
'এন 2' এর পরিবর্তে '0.00' ব্যবহার করে দুটি দশমিক স্থান ছাড়াই হাজার হাজার বিভাজক পাওয়া যায়।
8128

2
স্ট্রিং রূপান্তর মনে হচ্ছে? অর্ডার দ্বারা স্ক্রু আপ যা।
blissweb

2
@ ব্লিসওয়েব কোনও সমস্যা হবেনা কারণ আপনি মূল কলামে অর্ডার করতে পারেন, ফর্ম্যাট ফাংশনের আউটপুট নয়।
ম্যাটেন



5
CAST(QuantityLevel AS NUMERIC(18,2))

2
স্ট্যাক ওভারফ্লোতে স্বাগতম! কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু সীমিত, তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান, তা বর্ণনা করে এর দীর্ঘমেয়াদী মানকে ব্যাপকভাবে উন্নতি করবে এবং অন্যান্য অনুরূপ প্রশ্নের সাথে ভবিষ্যতের পাঠকদের পক্ষে আরও দরকারী করে তুলবে। আপনার অনুমানগুলি সহ কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
sepehr



3

নিম্নলিখিত জিজ্ঞাসা দরকারী এবং সহজ-

declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

0.25 হিসাবে আউটপুট দেয়।


3

আপনি কখনই ডিনোমিনেশন ব্যবহার করেন তা দশমিক হওয়া উচিত, উদাহরণস্বরূপ 1548/100দেবে15.00

আমরা যদি প্রতিস্থাপন 100সঙ্গে 100.0আমাদের উদাহরণে আমরা পাবেন15.48

select 1548/100 
15.00000

select 1548/100.0
15.4800

0

3

আপনার নম্বরটিকে একটি Numericবা তে রূপান্তর করুন Decimal

নিম্নলিখিতটি দিয়ে আপনার জিজ্ঞাসাটি প্রতিস্থাপন করুন।

SQL সার্ভার

Select Convert(Numeric(38, 2), Minutes/60.0) from ....

মাইএসকিউএল:

Select Convert(Minutes/60.0, Decimal(65, 2)) from ....

Castফাংশনের জন্য একটি মোড়কের হয় Convertফাংশন। এসকিউএল একটি ব্যাখ্যাযুক্ত ভাষা হওয়ার সাথে এর ফলাফল এবং ফলাফলটি হ'ল যদিও দুটি ফাংশন একই ফলাফল প্রকাশ করে তবে Castফাংশনটির পর্দার আড়ালে কিছুটা বেশি চলছে । Convertফাংশনটি ব্যবহার করা একটি ছোট সঞ্চয়, তবে ছোট সঞ্চয় বহুগুণ।



2

নীচের উত্তরগুলিতে অ্যাড-অন হিসাবে, আপনার সূত্রগুলিতে আইএনটি বা নন-দশমিক ডেটাটাইপগুলি ব্যবহার করার সময়, মানটি 1 এবং আপনার পছন্দসই দশমিকের সংখ্যাকে গুণতে ভুলবেন না।

উদাহরণস্বরূপ - TotalPackagesহ'ল একটি INTএবং তাই ডিনোমিনেটর TotalContainersতবে আমি চাই আমার ফলাফলটি 6 দশমিক। পর্যন্ত।

এইভাবে:

((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,

1

নিম্নলিখিত স্নিপেট আপনাকে সাহায্য করতে পারে:

select SUBSTR(ENDDTTM,1, 9), extract(DAY FROM (ENDDTTM)), ENDDTTM, BEGINDTTM,  (ENDDTTM - BEGINDTTM),substr(BEGINDTTM, 1,15), substr((ENDDTTM - BEGINDTTM), 12, 8),
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 3600 + substr((ENDDTTM - BEGINDTTM), 15, 2)*60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)),2) as seconds,
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 60 + substr((ENDDTTM - BEGINDTTM), 15, 2) +  substr((ENDDTTM - BEGINDTTM), 18, 2)/60 ), 2)as minutes,
round((substr((ENDDTTM - BEGINDTTM), 12, 2) + substr((ENDDTTM - BEGINDTTM), 15, 2)/60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)/3600 ),2)  as hours

0

আমি এসটিআর ফাংশনটি এটি সম্পাদন করার সবচেয়ে পরিষ্কার উপায় খুঁজে পাই।

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