将INT转换为VARCHAR SQL

399
我正在使用Sybase,执行了一个select语句返回了一个名为"iftype"的列,但它的数据类型是int,我需要将其转换为varchar。当我尝试不使用convert函数执行select语句时,会出现以下错误:

错误代码257,SQL状态37000:不允许从数据类型“VARCHAR”隐式转换为“INT”。请使用CONVERT函数运行此查询。

我不知道如何使用CONVERT函数。可以有人帮助我吗?

5
我认为你需要这个链接:http://msdn.microsoft.com/en-us/library/ms187928.aspx。 - Lajos Veres
6个回答

670

使用convert函数。

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

9
根据错误提示,是将VARCHAR转换为INT,但我正在回答他的问题,而不是错误信息。 - Tobberoth
2
谢谢。但是现在我又遇到了另一个错误。当我尝试执行这种类型的选择时:SELECT CONVERT(varchar(10), field_name) FROM table_name。或者像这样的普通选择:SELECT field_name FROM table_name。两个都是正确的。我不知道为什么。但是当我尝试在选择末尾加上“where”时,无论使用转换还是不使用转换,我都会得到相同的错误:不允许从数据类型“VARCHAR”隐式转换为“INT”。使用CONVERT函数来运行此查询。 - Murilo
3
那是因为错误并不是来自你所认为的地方。这个错误告诉你,你的代码试图在需要整数的地方使用了一个“varchar”类型。你需要给我们写出你实际的 SQL 语句以便我们提供帮助。 - Tobberoth
15
@Tobberoth,就算没有什么价值,我只是通过谷歌搜索到这里的。 Stack Overflow 的一部分价值在于可以得到几乎任何问题的答案,即使是基础问题。 - KyleMit
7
若该数字是较大负数,我认为应使用varchar(11) - Trisped
显示剩余2条评论

129

使用 STR 函数:

SELECT STR(field_name) FROM table_name

参数

float_expression

是带有小数点的近似数值(float)数据类型的表达式。

length

是总长度。这包括小数点、符号、数字和空格。默认为10。

decimal

是小数点右侧的位数。decimal 必须小于或等于16。如果 decimal 超过16,则结果将被截断为小数点右侧的十六位。

来源:https://msdn.microsoft.com/zh-cn/library/ms189527.aspx


5
“STR()”应该是正确答案,它比其他选择更简单、更容易避免错误。 - HerrimanCoder
10
由于某种奇怪的原因,这个方法对我不起作用,因为它在文本前面添加了一个制表符,我不知道为什么。但是选择的解决方案确实有效。 - MaQy
5
在转换后的数字前添加空格,使其变得无用。 - m12lrpv
18
使用 LTRIM(STR())。 - ashilon
5
STR()函数会在转换变量为字符串时在其前面添加空格。对于十进制变量进行转换可能是个不错的选择,但对于整数则不太适用。 - Ebleme
显示剩余2条评论

36
您可以使用CAST函数:
SELECT CAST(your_column_name AS varchar) FROM your_table_name

4
一个人也可以尝试相同的查询“在未指定varchar字符长度的情况下”。>> SELECT CAST(your_column_name AS varchar) FROM your_table_name - Bandham Manikanta

25

实际上,您不需要使用STR或Convert。只需选择'xxx'+LTRIM(ColumnName)即可完成工作。 可能,LTRIM在底层使用了Convert或STR。

LTRIM还消除了提供长度的需要。它似乎可以在整数或浮点数中起作用,而无需担心截断。

SELECT LTRIM(ColumnName) FROM TableName

此外,LTRIM比STR更好

SELECT STR(1234567890.123) 

给出 1234567890 而

SELECT LTRIM(1234567890.123) 

提供 1234567890.123


这是唯一对我有效的答案。其他的都给了我“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有误”的错误信息。 - swifthing
@swifthing,很高兴它起作用了。此外,如果您想避免小数的截断,这是最佳答案。 - PAS

1
SELECT Cast(Cast([field_name] AS BIGINT) AS NVARCHAR(255))
FROM   table_name  

请参考如何回答以获取有关如何提供高质量答案的详细信息。提供上下文和详细信息以说明为什么这可能是一个理想的解决方案是很有用的。 - arkon
1
请参见“完全基于代码的答案解释”。虽然这可能在技术上是正确的,但它并没有解释为什么它可以解决问题或应该被选为答案。我们应该在帮助解决问题的同时进行教育。 - the Tin Man

0

CONVERT(DATA_TYPE, Your_Column) 是 SQL 中 CONVERT 方法的语法。通过这个转换函数,我们可以将逗号(,)右侧的列数据转换为逗号左侧的数据类型。请参见下面的示例。

SELECT CONVERT (VARCHAR(10), ColumnName) FROM TableName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接