แปลงสตริงเป็น int โดยใช้เคียวรี sql


คำตอบ:


297

คุณสามารถใช้CAST หรือ CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
ฉันจะจับ / ป้องกันข้อยกเว้นเมื่อหนึ่งในฟิลด์นั้นไม่ใช่ตัวเลขได้อย่างไร ฉันคาดว่าจะแปลงเป็น 0
Chloe

40
พบมัน:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe

9
แค่คำเดียว IsNumeric()ก็สามารถให้ผลลัพธ์ที่ผิดปกติได้ มันจะส่งคืน TRUE สำหรับสตริง "-." ซึ่งจะยังคงทำให้เกิดข้อผิดพลาดเมื่อคุณพยายามที่จะโยนมันเป็นตัวเลข
Curt

3
IsNumeric จะเป็นจริงสำหรับสตริงที่มี "-" เฉพาะเมื่อสตริงเป็นตัวเลขเช่น "-5" หรือ "-20" จะเป็นเท็จสำหรับสตริงเช่น "5-", "-2-1" ดังนั้นถ้า isNumeric () เป็นจริงการแปลงไม่ควรโยนข้อยกเว้นใด ๆ
Pratyush Dhanuka

11

โปรดระวังด้วยว่าเมื่อทำการแปลงจากสตริงตัวเลขเช่น'56.72'INT คุณอาจเกิดข้อผิดพลาด SQL ขึ้น

Conversion failed when converting the varchar value '56.72' to data type int.

หากต้องการหลีกเลี่ยงสิ่งนี้ให้ทำสองสิ่งต่อไปนี้:

STRING -> NUMERIC -> INT

หรือ

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)

เมื่อคัดลอกข้อมูลจาก TableA ไปยัง TableB การแปลงจะมีความหมายดังนั้นคุณไม่จำเป็นต้องมีการแปลงที่สอง (หากคุณมีความสุขในการปัดเศษเป็น INT ที่ใกล้ที่สุด):

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA

8

เริ่มต้นด้วย SQL Server 2012 คุณสามารถใช้TRY_PARSEหรือTRY_CONVERT

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

ไม่ใช่คำตอบที่ถูกต้องสำหรับคำถามเดิมเนื่องจากเกี่ยวข้องกับ SQL Server 2005 แต่เนื่องจากเป็น 2019 และมีคนจำนวนน้อยกว่าที่ถูกผูกติดอยู่กับ SQL Server รุ่นเก่าคำตอบนี้มีประโยชน์แน่นอน
shaune

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