ลบเลขศูนย์ต่อท้ายจากทศนิยมใน SQL Server


85

ฉันมีคอลัมน์DECIMAL(9,6)คือรองรับค่าเช่น 999,123456

แต่เมื่อฉันแทรกข้อมูลเช่น 123,4567 มันจะกลายเป็น 123,456700

จะลบเลขศูนย์เหล่านั้นได้อย่างไร?


โปรดเปลี่ยนคำตอบที่ถูกต้องเป็นคำตอบของ @ Andomar
dangalg

@dangalg: ฉันเชื่ออย่างยิ่งว่าสิ่งนี้ควรทำในเลเยอร์การนำเสนออย่างแน่นอน นั่นเป็นเหตุผลที่ฉันไม่เคยเปลี่ยนคำตอบที่ยอมรับ อย่างไรก็ตามหลังจากพิจารณาเพิ่มเติมแล้วฉันคิดว่าฉันควรยอมรับสิ่งที่ชุมชนระบุอย่างชัดเจนว่าคำตอบใดดีที่สุด
abatishchev

คำตอบ:


147

decimal(9,6)ร้านค้า 6 หลักที่ด้านขวาของเครื่องหมายจุลภาค การแสดงค่าศูนย์ต่อท้ายหรือไม่เป็นการตัดสินใจในการจัดรูปแบบซึ่งโดยปกติจะใช้กับฝั่งไคลเอ็นต์

แต่เนื่องจากรูปแบบ SSMS ที่floatไม่มีศูนย์ต่อท้ายคุณสามารถลบศูนย์ต่อท้ายได้โดยการส่งdecimalไปยัง a float:

select 
    cast(123.4567 as DECIMAL(9,6))
,   cast(cast(123.4567 as DECIMAL(9,6)) as float)

พิมพ์:

123.456700  123,4567

(ตัวคั่นทศนิยมของฉันเป็นลูกน้ำ แต่ SSMS จัดรูปแบบทศนิยมด้วยจุดเห็นได้ชัดว่าเป็นปัญหาที่ทราบ)


8
+1 ฉันคิดว่าการแปลงเป็น float จะทำให้ผลลัพธ์มีความไม่แม่นยำ แต่ดูเหมือนว่าจะทำงานได้ดีอย่างแน่นอน
Martin Smith

1
ข้อเสียอย่างหนึ่งของวิธีนี้คือถ้าคุณเริ่มต้นด้วย "2.0" มันจะกลายเป็น "2" สิ่งนี้อาจใช้ได้สำหรับผู้ที่ถามคำถาม แต่ฉันต้องสามารถเก็บศูนย์เดียวไว้หลังจุดทศนิยมได้โดยไม่ต้องเก็บค่าศูนย์ต่อท้ายอื่น ๆ คำตอบของ @ user1959416 แก้ปัญหานั้นได้
Mason G. Zhwiti

6
Plus float โดยทั่วไปเป็นตัวเลือกที่แย่มากสำหรับการจัดเก็บตัวเลข คุณจะได้รับข้อผิดพลาดในการปัดเศษเนื่องจากไม่ใช่ประเภทที่แน่นอน ห้ามใช้ลูกลอยโดยเด็ดขาด
HLGEM

ความคิดเห็นเกี่ยวกับการลอยตัวที่ถูกจัดรูปแบบโดยไม่มีศูนย์ต่อท้ายมีประโยชน์อย่างยิ่ง
Sanjiv Jivan

ฉันคิดถูกหรือไม่ว่ามาตราส่วนและความแม่นยำของทศนิยมอาจเกินกว่าจำนวนทศนิยมและด้วยเหตุนี้จึงอาจมีบางกรณีที่ (โดยมีนัยสำคัญมากกว่า 17 หลัก) คำตอบนี้ใช้ไม่ได้
Caius Jard

32

คุณสามารถใช้FORMAT()ฟังก์ชัน (SqlAzure และ Sql Server 2012+):

SELECT FORMAT(CAST(15.12     AS DECIMAL(9,6)), 'g18')  -- '15.12'
SELECT FORMAT(CAST(0.0001575 AS DECIMAL(9,6)), 'g10')  -- '0.000158'
SELECT FORMAT(CAST(2.0       AS DECIMAL(9,6)), 'g15')  -- '2'

โปรดใช้ความระมัดระวังเมื่อใช้กับ FLOAT (หรือ REAL): อย่าใช้g17หรือใหญ่กว่า ( g8หรือใหญ่กว่าด้วย REAL) เนื่องจากความแม่นยำที่ จำกัด ของการแสดงเครื่องทำให้เกิดผลกระทบที่ไม่ต้องการ:

SELECT FORMAT(CAST(15.12 AS FLOAT), 'g17')         -- '15.119999999999999'
SELECT FORMAT(CAST(0.9 AS REAL), 'g8')             -- '0.89999998'
SELECT FORMAT(CAST(0.9 AS REAL), 'g7')             -- '0.9'

นอกจากนี้โปรดทราบว่าตามเอกสารประกอบ :

FORMAT อาศัยการมีอยู่ของ. NET Framework Common Language Runtime (CLR) ฟังก์ชันนี้จะไม่ถูกรีบูตเนื่องจากขึ้นอยู่กับการมีอยู่ของ CLR การรีบูตฟังก์ชันที่ต้องใช้ CLR อาจทำให้เกิดข้อผิดพลาดบนเซิร์ฟเวอร์ระยะไกล

ทำงานใน SqlAzure ได้เช่นกัน


สำหรับวัตถุประสงค์ของฉันฉันพบสตริงรูปแบบของ g8 ที่จัดรูปแบบหมายเลขของฉันเป็น "1e-08" ซึ่งไม่ใช่สิ่งที่ฉันเป็น คำตอบนี้นำฉันไปสู่สิ่งที่ฉันสามารถใช้ได้
Caius Jard

18
SELECT CONVERT(DOUBLE PRECISION, [ColumnName])

SQL Server 2008 ขึ้นไป
Bat_Programmer

จะเกิดอะไรขึ้นเมื่อตัวเลขเช่น "123.10705000000" ฉันลองใช้ SELECT CONVERT (DOUBLE PRECISION, 123.10705000000) แต่ให้ "123.107" เป็นคำตอบ และฉันต้องการ "123.10705" เป็นเอาต์พุต? มีวิธีใดบ้าง? ฉันไม่ต้องการใช้ CHARINDEX
Bhavika Zimbar

16

ฉันลังเลที่จะโยนให้ลอยเพราะมีโอกาสที่ตัวเลขจะอยู่ในทศนิยมมากกว่าที่ทศนิยมจะแสดงได้

FORMAT เมื่อใช้กับสตริงรูปแบบ. net 'g8' จะส่งคืนสัญกรณ์ทางวิทยาศาสตร์ในกรณีของทศนิยมที่มีขนาดเล็กมาก (เช่น 1e-08) ซึ่งไม่เหมาะสมเช่นกัน

การใช้สตริงรูปแบบที่กำหนดเอง ( https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings ) ทำให้ฉันบรรลุสิ่งที่ต้องการ:

DECLARE @n DECIMAL(9,6) =1.23;
SELECT @n
--> 1.230000
SELECT FORMAT(@n, '0.######')
--> 1.23

หากคุณต้องการให้ตัวเลขของคุณมีศูนย์ต่อท้ายอย่างน้อยหนึ่งตัวดังนั้น 2.0 จึงไม่กลายเป็น 2 ให้ใช้สตริงรูปแบบเช่น 0.0#####

จุดทศนิยมถูกแปลเป็นภาษาท้องถิ่นดังนั้นวัฒนธรรมที่ใช้ลูกน้ำเป็นตัวคั่นทศนิยมจะพบกับเอาต์พุตลูกน้ำโดยที่. คือ

แน่นอนว่านี่เป็นวิธีปฏิบัติที่น่าท้อใจในการให้ชั้นข้อมูลทำการจัดรูปแบบ (แต่ในกรณีของฉันไม่มีเลเยอร์อื่นผู้ใช้กำลังเรียกใช้ขั้นตอนการจัดเก็บอย่างแท้จริงและวางผลลัพธ์ในอีเมล: /)


ใช่นี่เป็นทางออกเดียวที่ช่วยให้สามารถควบคุมตัวเลขทางด้านขวาของตัวคั่นทศนิยมได้อย่างสมบูรณ์ในขณะที่หลีกเลี่ยงสัญกรณ์ทางวิทยาศาสตร์ ปัญหาเดียวในการแก้ปัญหานี้คือ FORMAT ช้าจริงๆ (!) (ภาพนิ่ง .. ใน SQL2019)
Tor

7
SELECT REVERSE(ROUND(REVERSE(2.5500),1))

พิมพ์:

2.55

2
วิธีนี้เป็นวิธีที่ดีที่จะปล่อยให้ศูนย์ต่อท้ายหากมีเพียงศูนย์ ดังนั้น 2.5500 จะคืนค่า 2.55 และ 2.000 คืนค่า 2.0 แทนที่จะเป็น 2 เหมาะสำหรับเมื่อคุณจัดรูปแบบขนาดเครื่องยนต์ในรถยนต์ ...
Mason G. Zhwiti

4
@ MasonG.Zhwiti ฉันสงสัยว่าสิ่งนี้จะใช้ได้กับทศนิยมบางตัวที่มีตัวเลขมากกว่าหลังจุดทศนิยมเช่น 232.33220003200 เช่น: -)
gotqn

@gotqn จุดดีที่ล้มเหลวแน่นอน อย่างไรก็ตามสำหรับกรณีการใช้งานเฉพาะของเรา (การจัดรูปแบบขนาดเครื่องยนต์ในรถยนต์) มันทำงานได้อย่างสมบูรณ์แบบ :)
Mason G. Zhwiti

ตามที่ @gotqn บอก .. มันบั๊กกี้เมื่อเบอร์ยาว
Ofear

สิ่งนี้ใช้ไม่ได้กับตัวเลขเช่น 0.56000 มันจะให้ผล 56. ตลก
Gunjan Shakya


4

ลองสิ่งนี้:

SELECT REPLACE(TRIM(REPLACE(20.5500, "0", " ")), " ", "0")

ให้ 20.55


1
REPLACE (TRIM (REPLACE (20.00, "0", ""), "", "0") ทิ้งคุณไว้ด้วยการต่อท้าย => "20. "
Keith Sirmons

เหมาะอย่างยิ่งกับกรณีของฉันและดูเหมือนว่าจะเป็นวิธีที่ง่ายที่สุด Thumb & โหวต!
Oak_3260548

ทางออกที่ดีโดยไม่ต้องแปลงเป็นลอย! ปัญหาเล็กน้อยหนึ่งด่างกลายเป็น0.000 .นี่คือการแก้ไขSELECT REPLACE(RTRIM(REPLACE(20.5500, "0", " ")), " ", "0")เพื่อตัดค่าศูนย์ต่อท้ายเท่านั้น
wilson

2

ฉันมีปัญหาที่คล้ายกัน แต่ก็จำเป็นต้องลบจุดทศนิยมที่ไม่มีจุดทศนิยมนี่คือวิธีแก้ปัญหาของฉันซึ่งแบ่งทศนิยมออกเป็นส่วนประกอบและฐานจำนวนอักขระที่ใช้จากสตริงจุดทศนิยมตามความยาวของ ส่วนประกอบเศษส่วน (โดยไม่ใช้ CASE) เพื่อให้เรื่องน่าสนใจยิ่งขึ้นจำนวนของฉันถูกจัดเก็บเป็นทศนิยมโดยไม่มีทศนิยม

DECLARE @MyNum FLOAT
SET @MyNum = 700000
SELECT CAST(PARSENAME(CONVERT(NUMERIC(15,2),@MyNum/10000),2) AS VARCHAR(10)) 
+ SUBSTRING('.',1,LEN(REPLACE(RTRIM(REPLACE(CAST(PARSENAME(CONVERT(NUMERIC(15,2),@MyNum/10000),1) AS VARCHAR(2)),'0',' ')),' ','0'))) 
+ REPLACE(RTRIM(REPLACE(CAST(PARSENAME(CONVERT(NUMERIC(15,2),@MyNum/10000),1) AS VARCHAR(2)),'0',' ')),' ','0') 

ผลลัพธ์นั้นเจ็บปวดฉันรู้ แต่ฉันไปถึงที่นั่นด้วยความช่วยเหลือมากมายจากคำตอบข้างต้น


2

วิธีที่ดีที่สุดคืออย่าแปลงเป็นFLOATหรือMONEYก่อนที่จะแปลงเนื่องจากมีโอกาสสูญเสียความแม่นยำ ดังนั้นวิธีที่ปลอดภัยอาจเป็นดังนี้:

CREATE FUNCTION [dbo].[fn_ConvertToString]
(
    @value sql_variant
)
RETURNS varchar(max)
AS
BEGIN
    declare @x varchar(max)
    set @x= reverse(replace(ltrim(reverse(replace(convert(varchar(max) , @value),'0',' '))),' ',0))

    --remove "unneeded "dot" if any
    set @x = Replace(RTRIM(Replace(@x,'.',' ')),' ' ,'.')
    return @x
END

ที่ @value สามารถใด ๆทศนิยม (x, y)


@abatishchev, fn_ เป็นคำนำหน้าที่ต้องการสำหรับฟังก์ชัน sql คำนำหน้าถูกใช้ในรูปแบบการเข้ารหัสและการตั้งชื่อมาตรฐานรวมถึงแนวทางปฏิบัติที่ดีที่สุดเราสามารถปรับแต่งคำนำหน้าของเราได้ แต่สำหรับแนวทางปฏิบัติที่ดีที่สุดเราใช้sp_สำหรับขั้นตอนการจัดเก็บfn_สำหรับฟังก์ชันtblสำหรับตารางและอื่น ๆ บน ... นี่ไม่ใช่ข้อกำหนด แต่เป็นแนวทางปฏิบัติที่ดีที่สุดในการจัดระเบียบฐานข้อมูลของเรา
japzdivino

@japongskie: ขอโทษนะ แต่เปล่าเลย ไม่จำเป็นต้องมีคำนำหน้าเลย นี่เป็นการปฏิบัติที่เลวร้ายที่สุด ดูmsdn.microsoft.com/en-us/library/dd172115(v=vs.100).aspx sqlperformance.com/2012/10/t-sql-queries/sp_prefix dba.stackexchange.com/q/25348/3186และ อื่น ๆ อีกมากมาย
abatishchev

@abatishchev เห็นแล้ว .. ดังนั้นฉันจะไม่ติดตามการสอนของโรงเรียนอีกต่อไป .. ฮ่าฮ่าฮ่าฮ่าเนื่องจากลิงค์ของคุณมาจาก mdsn ขอบคุณสำหรับสิ่งนี้ฉันจะเปลี่ยนแนวปฏิบัติที่ดีที่สุดของฉันทันที .. :)
japzdivino

2

ฉันมีปัญหาที่คล้ายกันจำเป็นต้องตัดเลขศูนย์ต่อท้ายจากตัวเลขเช่น xx0000,x00000,xxx000

ฉันใช้:

select LEFT(code,LEN(code)+1 - PATINDEX('%[1-Z]%',REVERSE(code))) from Tablename

รหัสคือชื่อของเขตข้อมูลที่มีหมายเลขที่จะตัดแต่ง หวังว่านี่จะช่วยคนอื่นได้


ข้อคิดเห็นนี้ทำงานได้ดีเมื่อคุณใช้ SQL Server เวอร์ชันที่เก่าพอที่คุณไม่สามารถใช้ฟังก์ชัน TRIM หรือ FORMAT ที่สร้างขึ้นใน SQL Server ได้
David Parvin

ฉันพบปัญหาหนึ่งเกี่ยวกับคำตอบนี้ ถ้าค่าในฟิลด์ 'code' เป็นค่า '10' ก็จะส่งกลับ '1' ถ้าตัวเลขคือ '10 .00 'ฉันคิดว่ามันจะไม่สนใจจุดทศนิยมด้วย
David Parvin

1

อีกทางเลือกหนึ่ง ...

ฉันไม่รู้ว่ามันมีประสิทธิภาพแค่ไหน แต่ดูเหมือนว่าจะใช้งานได้และไม่ผ่าน float:

select replace(rtrim(replace(
       replace(rtrim(replace(cast(@value as varchar(40)), '0', ' ')), ' ', '0')
       , '.', ' ')), ' ', '.')

เส้นกลางจะตัดช่องว่างต่อท้ายสองจุดด้านนอกจะลบจุดหากไม่มีตัวเลขทศนิยม


1

ฉันต้องการลบเลขศูนย์ต่อท้ายบนทศนิยมของฉันเพื่อที่ฉันจะได้เอาท์พุทสตริงที่มีความยาวหนึ่งโดยมีเฉพาะนำหน้าเท่านั้นเลขศูนย์หน้า

(เช่นฉันต้องการเอาต์พุต 14 ตัวอักษรดังนั้น 142.023400 จะกลายเป็น 000000142.0234)

ผมใช้parsename, reverseและcast as intเพื่อลบเลขศูนย์ต่อท้าย:

SELECT
    PARSENAME(2.5500,2)
    + '.'
    + REVERSE(CAST(REVERSE(PARSENAME(2.5500,1)) as int))

(เพื่อให้ได้ศูนย์นำหน้าของฉันฉันสามารถจำลองจำนวนศูนย์ที่ถูกต้องตามความยาวของด้านบนและเชื่อมสิ่งนี้เข้ากับด้านหน้าของด้านบน)

ฉันหวังว่านี่จะช่วยใครสักคน


@Protiguous เนื่องจากมีทศนิยม 1 ตำแหน่งจึงอ่าน 2.5500 เหมือน <schema_name> <object_name> พารามิเตอร์ที่สองของ 2 ส่งคืนชื่อสคีมาพารามิเตอร์ที่สองของ 1 ส่งคืนชื่ออ็อบเจ็กต์ โดยปกติจะใช้เช่น PARSENAME ('dbo.TableName', 2) เพื่อส่งคืน dbo หรือ PARSENAME ('dbo.TableName', 1) เพื่อส่งคืน TableName
อาลี

สวัสดี .. ฉันเห็นนามแฝงของฉันถูกตั้งค่าสถานะในความคิดเห็นของคุณ ฉันไม่รู้ว่าทำไม?
Protiguous

คำถามที่คุณถามฉันเมื่อวันที่ 26 พฤษภาคม 2020 คือ“ PARSENAME ควรจะทำงานที่นี่ได้อย่างไร ???” ขออภัยที่ตอบกลับคุณใช้เวลานานมาก
อาลี

1

เป็นไปได้ที่จะลบเลขศูนย์นำหน้าและหลังใน TSQL

  1. แปลงเป็นสตริงโดยใช้ฟังก์ชัน STR TSQL ถ้าไม่ใช่สตริงจากนั้น

  2. ลบทั้งเลขศูนย์นำหน้าและเลขท้าย

    SELECT REPLACE(RTRIM(LTRIM(REPLACE(AccNo,'0',' '))),' ','0') AccNo FROM @BankAccount
    
  3. ข้อมูลเพิ่มเติมเกี่ยวกับฟอรั่ม


4
น่าเกลียดไปหน่อย แต่เวอร์ชั่นนี้ฆ่าของเหลือ '.':REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(X,'0',' ')),' ','0'),'.',' ')),' ','.')
Chris B

1
ระวังให้ดีถ้าตัวเลขไม่ใช่ทศนิยมมันจะตัดศูนย์ด้วย CHARINDEX ('.', @ Number)! = 1 จะทดสอบว่า
Muflix

การตรวจสอบทศนิยมครั้งก่อนของฉันไม่ถูกต้อง ที่นี่ดีกว่า: เลือก Len (@Test) - Len (แทนที่ (@Test, 'a', '')) ตามที่ NumberOfCharacters อธิบาย: tinyurl.com/o4fc8g7และtinyurl.com/kgzkuqk
Muflix

0

แล้วเรื่องนี้ล่ะ? สมมติว่าข้อมูลเข้ามาในฟังก์ชันของคุณเป็น @thisData:

BEGIN
  DECLARE @thisText VARCHAR(255)
  SET @thisText = REPLACE(RTRIM(REPLACE(@thisData, '0', ' ')), ' ', '0')
  IF SUBSTRING(@thisText, LEN(@thisText), 1) = '.'
    RETURN STUFF(@thisText, LEN(@thisText), 1, '')
  RETURN @thisText
END

0
case when left(replace(ltrim(rtrim(replace(str(XXX, 38, 10), '0',  ' '))), ' ', '0'), 1) = '.'
then '0' 
else ''
end +

replace(ltrim(rtrim(replace(str(XXX, 38, 10), '0',  ' '))), ' ', '0') +

case when right(replace(ltrim(rtrim(replace(str(XXX, 38, 10), '0',  ' '))), ' ', '0'), 1) = '.'
then '0' 
else ''
end

นี่ไม่ได้แทนที่ 0 (ศูนย์) ระหว่างตัวเลขด้วยหรือ? อย่าคิดว่าการแทนที่ใช้งานได้ในตอนท้าย ...
mtk

0

ฉันเข้าใจว่านี่เป็นโพสต์เก่า แต่ต้องการให้ SQL ที่ฉันสร้างขึ้นมา

DECLARE @value DECIMAL(23,3)
set @value = 1.2000
select @value original_val, 
    SUBSTRING(  CAST( @value as VARCHAR(100)), 
                0,
                PATINDEX('%.%',CAST(@value as VARCHAR(100)))
            )
      + CASE WHEN ROUND( 
                        REVERSE( SUBSTRING( CAST(@value as VARCHAR(100)),
                                        PATINDEX('%.%',CAST(@value as VARCHAR(100)))+1,
                                        LEN(CAST(@value as VARCHAR(100)))
                                        )
                                )
                    ,1) > 0 THEN 
            '.' 
            +  REVERSE(ROUND(REVERSE(SUBSTRING( CAST(@value as VARCHAR(100)),
                                                PATINDEX('%.%',CAST(@value as VARCHAR(100)))+1,
                                                LEN(CAST(@value as VARCHAR(100)))
                                                )
                ),1))
        ELSE '' END  AS modified_val


0

วิธีที่ง่ายที่สุดคือแคสต์ค่าเป็น FLOAT จากนั้นไปยังประเภทข้อมูลสตริง

CAST(CAST(123.456000 AS FLOAT) AS VARCHAR(100))

-1

ลองสิ่งนี้:

select Cast( Cast( (ROUND( 35.457514 , 2) *100) as Int) as float ) /100

ฉันชอบคำตอบของ @ user1959416 ที่นี่ดีกว่าเพราะมันไม่ได้เปลี่ยนค่า ตัวอย่างเช่นเริ่มต้นด้วย 2.5550 เมธอดของคุณจะได้ผลลัพธ์เป็น 2.56 ในขณะที่ผลตอบแทน 2.555
Mason G. Zhwiti

-1

ฉันรู้ว่าเธรดนี้เก่ามาก แต่สำหรับผู้ที่ไม่ได้ใช้ SQL Server 2012 ขึ้นไปหรือไม่สามารถใช้ฟังก์ชัน FORMAT ไม่ว่าด้วยเหตุผลใดก็ตามต่อไปนี้จะใช้งานได้

นอกจากนี้วิธีแก้ปัญหาจำนวนมากไม่ทำงานหากตัวเลขน้อยกว่า 1 (เช่น 0.01230000)

โปรดทราบว่าสิ่งต่อไปนี้ใช้ไม่ได้กับตัวเลขติดลบ

DECLARE @num decimal(28,14) = 10.012345000
SELECT PARSENAME(@num,2) + REPLACE(RTRIM(LTRIM(REPLACE(@num-PARSENAME(@num,2),'0',' '))),' ','0') 

set @num = 0.0123450000
SELECT PARSENAME(@num,2) + REPLACE(RTRIM(LTRIM(REPLACE(@num-PARSENAME(@num,2),'0',' '))),' ','0') 

ส่งกลับ 10.012345 และ 0.012345 ตามลำดับ



-1

คอลัมน์ DECIMAL (9,6) จะแปลงเป็น float โดยไม่สูญเสียความแม่นยำดังนั้น CAST (... AS float) จะทำเคล็ดลับ


@HLGEM: การบอกว่าลูกลอยเป็นตัวเลือกที่ไม่ดีสำหรับการจัดเก็บตัวเลขและ "ห้ามใช้ลูกลอย" นั้นไม่ถูกต้อง - คุณเพียงแค่ต้องรู้ตัวเลขของคุณเช่นการวัดอุณหภูมิจะไปได้ดีเหมือนกับการลอย

@abatishchev และ @japongskie: คำนำหน้าอยู่หน้า procs และฟังก์ชันที่จัดเก็บ SQL ยังคงเป็นความคิดที่ดีหากไม่จำเป็น ลิงก์ที่คุณกล่าวถึงเพียงสั่งให้ไม่ใช้คำนำหน้า "sp_" สำหรับโพรซีเดอร์ที่เก็บไว้ซึ่งคุณไม่ควรใช้คำนำหน้าอื่น ๆ ก็ใช้ได้เช่น "usp_" หรือ "spBob_"

ข้อมูลอ้างอิง: "จำนวนเต็มทั้งหมดที่มีตัวเลขทศนิยมที่มีนัยสำคัญ 6 หลักหรือน้อยกว่าสามารถแปลงเป็นค่าทศนิยม IEEE 754 ได้โดยไม่สูญเสียความแม่นยำ": https://en.wikipedia.org/wiki/Single-precision_floating-point_format

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