แปลง INT เป็น VARCHAR SQL


341

ฉันกำลังใช้ Sybase และฉันกำลังเลือกตัวเลือกที่ส่งคืนคอลัมน์ที่เรียกว่า "iftype" แต่ประเภทของมันคือ int และฉันจำเป็นต้องแปลงเป็น varchar เมื่อฉันพยายามเลือกโดยไม่ใช้ฟังก์ชั่นแปลงฉันได้รับข้อผิดพลาดนี้:

รหัสข้อผิดพลาด 257, สถานะ SQL 37000: การแปลงโดยนัยจากประเภทข้อมูล 'VARCHAR' เป็น 'INT' ไม่ได้รับอนุญาต ใช้ฟังก์ชัน CONVERT เพื่อเรียกใช้แบบสอบถามนี้

CONVERTฉันไม่ทราบวิธีการใช้ฟังก์ชั่น มีใครช่วยฉันทีได้ไหม


5
ฉันคิดว่าคุณต้องการสิ่งนี้: msdn.microsoft.com/en-us/library/ms187928.aspx
Lajos Veres

คำตอบ:


593

ใช้ฟังก์ชั่นแปลง

SELECT CONVERT(varchar(10), field_name) FROM table_name

8
ตามข้อผิดพลาดมันเป็นVARCHARไปได้INTแต่ฉันกำลังตอบคำถามของเขาไม่ใช่ข้อความแสดงข้อผิดพลาด
Tobberoth

2
ขอบคุณ แต่ตอนนี้ฉันได้รับข้อผิดพลาดอีกครั้ง เมื่อฉันพยายามเลือก Select: SELECT CONVERT (varchar (10), field_name) จาก table_name หรือแม้แต่รายการปกติเช่น: SELECT field_name FROM table_name ทั้งสองถูกต้อง ฉันไม่รู้ว่าทำไม แต่เมื่อฉันลอง แต่เป็น "ที่ไหน" ในตอนท้ายของการเลือกโดยใช้การแปลงหรือไม่ฉันได้รับข้อผิดพลาดเดียวกัน: การแปลงโดยนัยจากประเภทข้อมูล 'VARCHAR' เป็น 'INT' ไม่ได้รับอนุญาต ใช้ฟังก์ชัน CONVERT เพื่อเรียกใช้แบบสอบถามนี้
Murilo

3
@Murilo นั่นเป็นเพราะข้อผิดพลาดไม่ได้มาจากสิ่งที่คุณคิด ข้อผิดพลาดจะบอกคุณว่ารหัสของคุณกำลังพยายามใช้รหัสvarcharที่intจำเป็น คุณต้องเขียนคำสั่ง SQL จริงของคุณเพื่อให้เราช่วยคุณ
Tobberoth

14
@ Bobberoth สำหรับสิ่งที่คุ้มค่าฉันเพิ่งลงจอดที่นี่โดย googling คุณค่าของ SO ส่วนหนึ่งคือการตอบคำถามเกือบทุกคำถามแม้แต่ในระดับพื้นฐาน
KyleMit

6
ฉันคิดว่ามันควรจะเป็นvarchar(11)ในกรณีที่จำนวนนั้นเป็นจำนวนลบมาก
เดินขบวนใน

100

ใช้STRฟังก์ชั่น:

SELECT STR(field_name) FROM table_name

ข้อโต้แย้ง

float_expression

เป็นนิพจน์ของชนิดข้อมูลตัวเลข (ลอย) โดยประมาณที่มีจุดทศนิยม

ความยาว

คือความยาวทั้งหมด ซึ่งรวมถึงจุดทศนิยมเครื่องหมายตัวเลขและช่องว่าง ค่าเริ่มต้นคือ 10

ทศนิยม

คือจำนวนตำแหน่งทางด้านขวาของจุดทศนิยม ทศนิยมต้องน้อยกว่าหรือเท่ากับ 16 ถ้าทศนิยมมากกว่า 16 ผลจะถูกตัดให้เหลือสิบหกตำแหน่งทางด้านขวาของจุดทศนิยม

แหล่งที่มา: https://msdn.microsoft.com/en-us/library/ms189527.aspx


3
STR()ควรเป็นคำตอบที่ถูกต้องมันง่ายกว่าและมีข้อผิดพลาดน้อยกว่าทางเลือกอื่น
HerrimanCoder

7
ด้วยเหตุผลแปลก ๆ บางอย่างมันไม่ได้ผลสำหรับฉันเพราะมันเพิ่มแท็บไว้หน้าข้อความไม่รู้ว่าทำไม โซลูชันที่เลือกใช้งานได้แม้ว่า
MaQy

3
ช่องว่างของแผ่นอิเล็กโทรดด้านหน้าของหมายเลขที่แปลงแล้วทำให้ไม่มีประโยชน์
m12lrpv

13
ใช้ LTRIM (STR ())
ashilon

2
STR () ให้ช่องว่างที่ด้านหน้าของตัวแปรที่คุณแปลงเป็นสตริง มันเป็นทางเลือกที่ดีในการแปลงตัวแปรทศนิยม แต่ไม่ใช่สำหรับ Int
Ebleme


3

จริงๆแล้วคุณไม่จำเป็นต้องใช้ STR หรือแปลง เพียงเลือก 'xxx' + LTRIM (1) ทำงาน อาจเป็นไปได้ว่า LTRIM ใช้ Convert หรือ STR ใต้ฝากระโปรง

LTRIM ยังลบความต้องการในการจัดเตรียมความยาวและโดยปกติแล้วค่าเริ่มต้น 10 จะดีพอสำหรับการแปลงจำนวนเต็มเป็นสตริง

SELECT LTRIM(ColumnName) FROM TableName

0

CONVERT(DATA_TYPE , Your_Column)เป็นไวยากรณ์สำหรับวิธีการแปลงใน SQL จากฟังก์ชั่นแปลงนี้เราสามารถแปลงข้อมูลของคอลัมน์ซึ่งอยู่ทางด้านขวาของเครื่องหมายจุลภาค (,) เป็นชนิดข้อมูลทางด้านซ้ายของเครื่องหมายจุลภาค (,) โปรดดูตัวอย่างด้านล่าง

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