วิธีรับผลลัพธ์ทศนิยมโดยการหารค่าจำนวนเต็มสองค่าโดยใช้ T-SQL


173

การใช้ T-SQL และ Microsoft SQL Server ฉันต้องการระบุจำนวนทศนิยมเมื่อฉันทำการหารระหว่าง 2 จำนวนเต็มเช่น:

select 1/3

0ที่ให้ผลตอบแทนในปัจจุบัน 0,33ผมอยากให้มันกลับมา

สิ่งที่ต้องการ:

select round(1/3, -2)

แต่นั่นไม่ได้ผล ฉันจะบรรลุผลลัพธ์ที่ต้องการได้อย่างไร


3
คุณลอง 1.0 / 3 แล้วหรือยัง?
Thilo

คำตอบที่ฉันได้รับนั้นเพียงพอแล้ว
LaBracca

คำตอบ:


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

@TroubleZero สำหรับการใช้งาน MySQLdecimal
itsazzad

ขอบคุณมากคุณช่วยชีวิตฉันไว้ ฉันลอง CAST (7/3 AS float) แต่กลับมา 2 อีกครั้ง ดังนั้นหมายเลขนักแสดงแก้ปัญหาของฉันได้
Yasin Yörük

3
ไม่จำเป็นต้องเลือกทั้งเงินปันผลและตัวหารโปรดดู @MS 'answer stackoverflow.com/a/30639343/2866644
robotik

70

เนื่องจาก SQL Server ทำการหารจำนวนเต็ม ลองสิ่งนี้:

select 1 * 1.0 / 3

สิ่งนี้มีประโยชน์เมื่อคุณส่งจำนวนเต็มเป็นพารามิเตอร์

select x * 1.0 / y

1
คุณสามารถปล่อยให้เป็นศูนย์ได้
John

43

ไม่จำเป็นต้องเลือกทั้งคู่ ประเภทข้อมูลผลลัพธ์สำหรับการหารจะเป็นประเภทที่มีลำดับความสำคัญของประเภทข้อมูลที่สูงกว่าเสมอ ดังนั้นการแก้ปัญหาจะต้อง:

SELECT CAST(1 AS float) / 3

หรือ

SELECT 1 / CAST(3 AS float)


13

ผมเข้าใจว่าCASTไอเอ็นจีที่จะFLOATไม่ได้รับอนุญาตใน MySQL และจะเพิ่มข้อผิดพลาดเมื่อคุณพยายามที่จะCAST(1 AS float)ตามที่ระบุไว้ในMySQL dev

วิธีแก้ปัญหานี้ง่าย ๆ แค่ทำ

(1 + 0.0)

จากนั้นใช้ROUNDเพื่อให้ได้จำนวนตำแหน่งทศนิยมที่เฉพาะเจาะจงเช่น

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

แบ่งข้างต้น SQL 1 2 และส่งกลับลอยถึง 3 0.500ตำแหน่งทศนิยมในขณะที่มันจะเป็น

หนึ่งสามารถCASTประเภทต่อไปนี้: ไบนารีถ่าน, วันที่, วันที่และเวลาทศนิยม JSON, nchar ลงนามเวลาและได้รับการรับรอง


3
MySQL ไม่อนุญาตให้มันก็ไม่อนุญาตให้มีการหล่อCAST FLOATส่งไปDECIMALแทน ดูเช่นstackoverflow.com/questions/7368163/...
markusk

7

ดูเหมือนว่าเคล็ดลับนี้ทำงานใน SQL Server และสั้นกว่า (ตามคำตอบก่อนหน้า)

SELECT 1.0*MyInt1/MyInt2

หรือ:

SELECT (1.0*MyInt1)/MyInt2

2
ฉันชอบสิ่งนี้มากที่สุดมันดูดีสำหรับการคำนวณเปอร์เซ็นต์:SELECT 100.0 * @Elapsed / @Total
EliSherer

3

ใช้สิ่งนี้

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

ที่นี่ใน sql นี้แปลงเป็นทศนิยมหรือคูณด้วย 1.00 ผลลัพธ์ที่จะเป็นเลขทศนิยมฉันจะพิจารณาทศนิยม 2 ตำแหน่ง คุณสามารถเลือกสิ่งที่คุณต้องการ


2

หากคุณมาที่นี่ (เหมือนฉัน) เพื่อค้นหาวิธีแก้ปัญหาสำหรับค่าจำนวนเต็มนี่คือคำตอบ:

CAST(9/2 AS UNSIGNED)

ส่งคืน 5

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.