【问题标题】:Convert INT to VARCHAR SQL将 INT 转换为 VARCHAR SQL
【发布时间】:2013-11-27 13:47:01
【问题描述】:

我正在使用 Sybase,我正在执行一个选择,它返回一个名为“iftype”的列,但它的类型是 int,我需要转换为 varchar。当我尝试在没有转换功能的情况下进行选择时,出现此错误:

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

我不知道如何实现函数CONVERT。有人可以帮帮我吗?

【问题讨论】:

标签: sql select type-conversion sybase


【解决方案1】:

使用转换功能。

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

【讨论】:

  • 根据错误,是VARCHAR 到INT 但我是在回答他的问题,而不是错误信息。
  • 谢谢。但现在我又犯了一个错误。当我尝试执行这种选择时:SELECT CONVERT(varchar(10), field_name) FROM table_name。甚至是普通的,例如:SELECT field_name FROM table_name。两者都是正确的。我不知道为什么。但是,当我尝试在选择结束时使用“where”时,无论是否使用转换,我都会收到相同的错误:不允许从数据类型“VARCHAR”到“INT”的隐式转换。使用 CONVERT 函数运行此查询
  • @Murilo 那是因为错误不是你想的那样。该错误告诉您,您的代码正在尝试使用varchar,其中需要int。您需要编写您的实际 SQL 语句以便我们为您提供帮助。
  • @Tobberoth,无论如何,我只是通过谷歌搜索来到这里。 SO 的部分价值在于获得几乎所有问题的答案,甚至是基本问题。
  • 我认为应该是varchar(11),以防数字是一个很大的负数。
【解决方案2】:

使用STR函数:

SELECT STR(field_name) FROM table_name

参数

float_expression

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

长度

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

十进制

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

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

【讨论】:

  • STR() 应该是正确的答案,它比其他选项更简单且不易出错。
  • 出于某种奇怪的原因,这对我不起作用,因为它在文本前面添加了一个标签,不知道为什么。选定的解决方案确实有效。
  • str 在转换后的数字前面填充空格,使其无用
  • 使用 LTRIM(STR())
  • STR() 在您转换为字符串的变量前面给出空格。转换十进制变量可能是一个不错的选择,但对于 Int 则不行。
【解决方案3】:

你可以使用CAST函数:

SELECT CAST(your_column_name AS varchar(10)) FROM your_table_name

【讨论】:

  • 也可以尝试“不指定 varchar 中字符的长度”的相同查询。 >> *SELECT CAST(your_column_name AS varchar) FROM your_table_name *
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    其实你不需要使用 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

    【讨论】:

      【解决方案6】:

      SELECT cast(CAST([field_name] AS bigint) as nvarchar(255)) FROM table_name

      【讨论】:

        猜你喜欢
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        相关资源
        最近更新 更多