将INT转换为VARCHAR SQL

Mur*_*ilo 322 sql sybase select type-conversion

我正在使用Sybase,我正在做一个select,它返回一个名为"iftype"的列,但它的类型是int,我需要转换为varchar.当我尝试在没有转换功能的情况下进行选择时,我收到此错误:

错误代码257,SQL状态37000:不允许从数据类型"VARCHAR"到"INT"的隐式转换.使用CONVERT函数运行此查询.

我不知道如何实现该功能CONVERT.有人可以帮帮我吗?

Tob*_*oth 565

使用转换功能.

SELECT CONVERT(varchar(10), field_name) FROM table_name
Run Code Online (Sandbox Code Playgroud)

  • @Tobberoth,因为它的价值,我只是通过谷歌搜索来到这里.SO的一部分价值就是得到几乎任何问题的答案,甚至是基本问题. (14认同)
  • 根据错误,它是`VARCHAR`到'INT`但我正在回答他的问题,而不是错误信息. (7认同)
  • 我认为应该是`varchar(11)`以防数字是一个大的负数. (5认同)
  • 谢谢.但现在我又遇到了另一个错误.当我尝试这样做时:SELECT CONVERT(varchar(10),field_name)FROM table_name.或者甚至是正常的:SELECT field_name FROM table_name.两者都是正确的.我不知道为什么.但是当我尝试在选择的末尾使用转换时的"where"时,我得到相同的错误:不允许从数据类型"VARCHAR"到"INT"的隐式转换.使用CONVERT函数运行此查询 (2认同)
  • @Murilo那是因为错误不是你的想法.该错误告诉您,您的代码正在尝试使用`varchar`,其中需要`int`.您需要为我们编写实际的SQL语句来帮助您. (2认同)

小智 92

使用STR功能:

SELECT STR(field_name) FROM table_name
Run Code Online (Sandbox Code Playgroud)

参数

float_expression

是具有小数点的近似数值(浮点)数据类型的表达式.

长度

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

十进制

是小数点右边的位数.decimal必须小于或等于16.如果decimal小于16,则结果将被截断为小数点右侧的16位.

来源:https://msdn.microsoft.com/en-us/library/ms189527.aspx

  • 使用LTRIM(STR()) (10认同)
  • 出于一些奇怪的原因,这对我来说不起作用,因为它在文本前面添加了一个标签,不明白为什么.选定的解决方案确实有效. (7认同)
  • str转换数字前面的垫空间使它无用 (3认同)
  • STR()应该是正确的答案,它比其他方法更简单,更不易出错。 (2认同)
  • STR() 在您转换为字符串的变量前面给出空格。转换十进制变量可能是一个不错的选择,但不适用于 Int。 (2认同)

Ham*_*ian 23

你可以使用CAST功能:

SELECT CAST(your_column_name AS varchar(10)) FROM your_table_name
Run Code Online (Sandbox Code Playgroud)

  • 还可以尝试“不指定 varchar 中字符的长度”的相同查询。>> *从 your_table_name 中选择 CAST(your_column_name AS varchar) * (4认同)

PAS*_*PAS 8

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

LTRIM 还消除了提供长度的需要。它似乎适用于整数或浮点数而无需担心截断。

SELECT LTRIM(ColumnName) FROM TableName
Run Code Online (Sandbox Code Playgroud)

此外,LTRIM 比 STR 好,因为

SELECT STR(1234567890.123) 
Run Code Online (Sandbox Code Playgroud)

给出 1234567890 而

SELECT LTRIM(1234567890.123) 
Run Code Online (Sandbox Code Playgroud)

给出 1234567890.123