เขียนตัวเลขด้วย SQL เซิร์ฟเวอร์ทศนิยมสองตำแหน่ง


คำตอบ:


213

ลองนี้

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

2
ถ้านี่คือคำตอบ 10 ปีที่ผ่านมามันก็ไม่มีอีกแล้ว วิธีนี้จะเปลี่ยน 10.11111 เป็น 10.00
Jonathon Cowley-Thom

ฉันลอง SELECT CONVERT (DECIMAL (10,2), 10.11111) มันกลับ 10.11 ผลลัพธ์เหมือนกันสำหรับ SELECT CONVERT (Decimal (10,2), '10.11111') มันอยู่ใน SQL Server 2008 R2
SKCS Kamal

70

ใช้Str()ฟังก์ชั่น มันใช้เวลาสามข้อโต้แย้ง (ตัวเลขจำนวนตัวอักษรรวมที่จะแสดงและจำนวนตำแหน่งทศนิยมที่จะแสดง

  Select Str(12345.6789, 12, 3)

แสดง: '12345.679' (3 ช่องว่าง, 5 หลัก 12345, ทศนิยมและสามหลักทศนิยม (679) - มันจะปัดเศษหากมันต้องตัดทอน (ยกเว้นส่วนจำนวนเต็มใหญ่เกินไปสำหรับขนาดทั้งหมดซึ่งในกรณีนี้ เครื่องหมายดอกจันจะแสดงแทน)

สำหรับทั้งหมด 12 ตัวอักษรโดยมี 3 ทางด้านขวาของจุดทศนิยม


1
it rounds if it has to truncate... เว้นแต่ว่าส่วนจำนวนเต็มมีขนาดใหญ่เกินไปสำหรับขนาดทั้งหมดซึ่งจะแสดงเครื่องหมายดอกจันแทน นี้ถูกกล่าวถึงในเอกสาร STRนี่คือคำพูดจากหน้านั้น:STR(1223,2) truncates the result set to **.
Mark Byers

36

โดยทั่วไปคุณสามารถกำหนดความแม่นยำของตัวเลขใน SQL โดยการกำหนดด้วยพารามิเตอร์ สำหรับกรณีส่วนใหญ่จะเป็นNUMERIC(10,2)หรือDecimal(10,2)- จะกำหนดคอลัมน์เป็นตัวเลขที่มีตัวเลข 10 หลักโดยมีความแม่นยำ 2 (ตำแหน่งทศนิยม)

แก้ไขเพื่อความชัดเจน


4
นอกจากนี้ยังสามารถประกาศเป็น DECIMAL (10, 2)
jrcs3

10
สิ่งนี้ผิดด้วยเหตุผลหลายประการ มันไม่ใช่ตัวเลขมันเป็นตัวเลขหรือทศนิยม คุณบอกว่าตัวเลข (10,2) อนุญาต 10 ตำแหน่งก่อนจุดทศนิยมซึ่งผิดเช่นกัน ตัวเลข (10,2) อนุญาตให้มีจำนวน 10 หลักโดยมี 2 ตำแหน่งหลังจากจุดทศนิยม ช่วง = -99999999.99 ถึง 99999999.99
George Mastros

@Gast Mastros: ดูเหมือนว่าคุณอยู่ในจุดที่มีความแม่นยำ ในการตั้งชื่อที่แท้จริงของการประชุมในการใช้งาน SQL จำนวนมากเป็นประเภทที่ถูกต้อง ถึงแม้ว่าผมจะยอมรับที่จะไม่ทราบว่ากรณีของ sqlserver
AAA

@Gastast มาเพื่อพูดในสิ่งเดียวกัน msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe

19

สิ่งนี้ใช้ได้กับฉันและเก็บเศษส่วนสองหลักเสมอ

23.1 ==> 23.10

25.569 ==> 25.56

1 ==> 1.00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

ภาพหน้าจอของรหัส


2
ลองใช้ฟังก์ชั่น STR () จาก Charles Bretana ด้านบน มันทำงานเหมือนสูตรของคุณ แต่จะปัดเศษในตัวอย่าง 25.569 ของคุณ
JerryOL

15

นี่เป็นวิธีที่เด็ก ๆ ทำกันในวันนี้:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123.46


1
ฟังก์ชัน FORMAT สามารถใช้งานได้ตั้งแต่รุ่น 2012 เป็นต้นไป
user1263981

หรือ: SELECT FORMAT (@test, '. ##')
java-love

หากข้อมูลอินพุตเป็น: DECLARE @test DECIMAL(18,6) = 0.456789 ดังนั้นSELECT FORMAT(@test, '##.##')จะส่งคืน: .46 คุณจะให้ข้อมูลนั้นแสดงค่าศูนย์นำหน้าได้0.46อย่างไร:
luisdev

ในการรับการนำหน้า 0 ให้ลองเลือกรูปแบบ (@test, '# 0. ##')
ClubbieTim

14

หากคุณต้องการเพียงทศนิยมสองตำแหน่งวิธีที่ง่ายที่สุดคือ ..

SELECT CAST(12 AS DECIMAL(16,2))

หรือ

SELECT CAST('12' AS DECIMAL(16,2))

เอาท์พุต

12.00



0

คูณค่าที่คุณต้องการแทรก (เช่น 2.99) คูณ 100

จากนั้นแทรกการหารด้วย 100 ของการเพิ่มผลลัพธ์. 01 ที่ส่วนท้าย:

299.01/100

0

ซึ่งจะอนุญาตให้มีทั้งหมด 10 หลักพร้อม 2 ค่าหลังจุดทศนิยม มันหมายความว่ามันสามารถรองรับค่าค่าก่อนทศนิยมถึง 8 หลักและ 2 หลังทศนิยม

ในการตรวจสอบให้ใส่ค่าในแบบสอบถามต่อไปนี้

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.