【问题标题】:T-SQL failed converting varchar to intT-SQL 无法将 varchar 转换为 int
【发布时间】:2017-02-03 11:15:42
【问题描述】:

我需要添加日期

select Name, Surname, Days, getdate(), 
CONVERT(VARCHAR(11),DATEADD(s,CONVERT(INT, Days) ), getdate()),101 )
from myTAble

但我得到错误

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

有什么想法吗?

【问题讨论】:

  • 那是 SQL Server 的吗?
  • 是的,它是用于 SQL 的
  • 你能创建 reproduceable 的例子吗?显然,select convert(int, '20') 将按预期工作而不会出现此类错误。所以问题出在您的数据中 - 或者您提供的错误消息可能不完全相关......您是否准确地复制粘贴了它?您的数据中是否有可能真的是 2O(大写字母 O)而不是 20
  • “SQL”是一种查询语言,而不是 DBMS 产品。但我假设您确实的意思是“SQL Server”
  • 在我的 db 20 中是 varchar,我需要转换为 int

标签: sql sql-server tsql int varchar


【解决方案1】:

括号混淆:

select Name, Surname, Days, getdate(), 
CONVERT(VARCHAR(11),DATEADD(s,CONVERT(INT, days), getdate()),101) 
from myTAble

【讨论】:

    【解决方案2】:

    首先,您的父母身份不正确,但这不太可能是这里的问题。 我创建了一个可验证的示例:

    create table MyTable
    (
     Name varchar(100)
    ,Surname varchar(100)
    ,[Days] varchar(100)
    )
    
    GO
    
    insert into MyTable(Name,Surname,[Days])
    values ('John', 'Doo', '20')
    ,('Stack', 'Overflow', char(178) + char(176))
    GO
    

    现在您的查询(带有正确的括号)

    select Name, Surname, Days, getdate(), 
    CONVERT(VARCHAR(11),DATEADD(s,CONVERT(INT, Days ), getdate()),101 )
    from myTAble
    

    我设法重现了您的问题(在某种程度上)

    将 varchar 值“²°”转换为数据类型时转换失败 诠释。

    这里的问题是你得到了一个20 不是正确的字符,也许你有一个排序问题

    在上面的示例中,我使用了我之前遇到的一个实际问题。在应用程序中显示20,但实际上在数据库中我们得到了非标准字符。

    在下面的示例中,一些特殊字符可能看起来像数字字符

    --° #176 ~ 0   --¹ #185 ~ 1   --² #178 ~ 2   --³ #179 ~ 3    
    select char(178) + char(176)
    

    您可以尝试检查数据是否为数字

    select *, isnumeric([Days]) from MyTable
    

    在我的例子中,我们清理了数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-27
      • 2013-07-21
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多