( หากคุณใช้ SQL Server 2012 หรือใหม่กว่าโปรดดู @ wBob สำหรับคำตอบที่สะอาดกว่าวิธีการที่ระบุไว้ในคำตอบของฉันด้านล่างจำเป็นเฉพาะเมื่อคุณใช้ SQL Server 2008 R2 หรือเก่ากว่า )
คุณไม่ต้องการ (หรือต้องการ) ตัวคั่นหลักพันเมื่อแปลงเป็นNUMERIC
ไม่ว่าจะเป็นเครื่องหมายจุลภาคจุดหรือช่องว่างดังนั้นให้กำจัดออกก่อน จากนั้นแปลงเครื่องหมายจุลภาคเป็นจุด / ทศนิยมและคุณทำเสร็จแล้ว:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
ผลตอบแทน:
7000.45
เพื่อความสมบูรณ์ฉันควรพูดถึงว่าฉันได้ลองด้วย:
SET LANGUAGE Greek;
ดูที่รูปแบบหลากหลายสำหรับการแปลงแต่ไม่มีอะไรใช้ที่นี่
รูปแบบฟังก์ชั่น แต่ประเภทการป้อนข้อมูลจะต้องเป็นตัวเลขหรือวันที่ / เวลา / ค่าวันที่และเวลา (นั่นและมันได้รับการแนะนำใน SQL Server 2012 จึงไม่ใช้บังคับกับ SQL Server 2008 R2 หรือมากกว่า)
และดูเหมือนจะไม่มีอะไรอื่นทำงาน ฉันหวังว่าจะได้พบกับบางสิ่งที่หรูหรากว่าการREPLACE
โทรสองสาย แต่ก็ยังไม่มีโชคเช่นนี้
แม้ว่าจะไม่ใช่โซลูชัน T-SQL ล้วนๆ แต่ก็สามารถทำได้ผ่าน SQLCLR และยังมีฟังก์ชั่นก่อนการทำที่ไม่นี้ในSQL #ห้องสมุด (ที่ผมเขียน) ชื่อString_TryParseToDecimal ฟังก์ชั่นนี้มีอยู่ในรุ่นฟรีและสามารถใช้งานได้กับ SQL Server ทุกรุ่นที่ขึ้นต้นด้วย SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
ผลตอบแทน:
7000.45000000000000000000