【问题标题】:Conversion Failed Nvarchar to INT将 Nvarchar 转换为 INT 失败
【发布时间】:2017-10-10 08:29:09
【问题描述】:

我有两个名为 Entry_DataData

的表

Entry_Data 包含三列:

EntryID DataID DataTypeID

1       50      18

2       49       59

30     28      16

数据有两列:

数据ID

50      0x00000000033654

49      可拆卸

28      E:\Test.txt

Value 列是一个 nvarchar 字段。

我在尝试将所有以 0x 开头的 Value 字段转换为 int 时编写了一个左连接,以便可以将十六进制值转换为有意义且人类可读的值,但是我收到错误:

转换 nvarchar 值时转换失败 ‘0x00000000033654’到数据类型int

SELECT TOP 100
  Entry_Data.DataTypeID AS DataTypeID,
  CAST(Data.Value AS nvarchar(440)) AS Value,
  Data.DataID AS DataID
FROM ActivityLog.Entry_Data
LEFT JOIN ActivityLog.Data
  ON ActivityLog.Entry_Data.DataID =
                                    CASE
                                      WHEN DataTypeID = 18 AND
                                        Value LIKE '%0x%' THEN CONVERT(nvarchar, CONVERT(int, Value, 1))
                                      ELSE DataTypeID
                                    END
WHERE DataTypeID = 18

【问题讨论】:

  • 您收到错误是因为您在 JOIN 条件下将 int 值与 nvarchar 进行比较。
  • 您能建议一下它的外观吗?
  • 您正在尝试使用 Value 检查 DataID,即 50 到 0x00000000033654,这是没有意义的。
  • 不幸的是,这就是表格的排列方式,所以我无法加入其他任何事情。你是说我想要达到的目标是不可能的?
  • 也许,你可以看到这个问题:stackoverflow.com/questions/703019/…

标签: sql sql-server sql-server-2008-r2 sql-convert


【解决方案1】:

在您的case expression 中,您将针对一种情况返回nvarchar

 THEN CONVERT(nvarchar, CONVERT(int, Value, 1))

第二种情况的整数

ELSE DataTypeID

您需要更正您的联接,以便它始终返回并 int 以使联接起作用。

【讨论】:

  • Value 字段并不总是 INT,所以 ELSE Value 是否有效?感谢回复
  • 我认为您可能在这里误用了 join 语句。连接总是在 Data_ID 列上,使结果可读的 case 表达式应该是 select 语句的一部分。
  • 感谢您的回复。你能给我一个例子吗?我不是原生 SQL 编写者
  • 除非我误读了你的问题,否则你可能想要这样的东西:SELECT TOP 100 Entry_Data.DataTypeID AS DataTypeID, CAST(Data.Value AS nvarchar(440)) AS Value, CASE WHEN DataTypeID = 18 AND Value LIKE '%0x%' THEN CONVERT(nvarchar, CONVERT(int, Value, 1)) ELSE DataTypeID END as FormattedValue, Data.DataID AS DataID FROM Entry_Data LEFT JOIN Data ON Entry_Data.DataID = Data.DataID
  • 嗨,当我搜索 1000 行但 DataTypeID 不等于 18 时,格式化值 = DataTypeID。我添加了一个 WHERE 子句以等于 DataTypeID,并且在将 nvarchar 值“0x00000000033654”转换为数据类型 int 时出现转换失败。
猜你喜欢
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 2011-08-29
  • 2015-06-20
  • 2016-02-02
相关资源
最近更新 更多