【问题标题】:Data conversion or data mapping error in SQLSQL 中的数据转换或数据映射错误
【发布时间】:2018-03-16 19:41:48
【问题描述】:

这是我尝试执行的 WinSQL 查询。

SELECT ezait6 AS "MO No",
       vhitno AS "Item No",
       vhrefd AS "Finish Date",
       vhmaqa AS "Manuf Qty",
       vhmaun AS "U/M"
FROM m3edbtest.mwohed,
     m3edbtest.cinacc
WHERE ezcono = 1
      AND vhcono = ezcono
      AND vhrefd >= '20170801'
      AND vhrefd <= '20170831'
      AND vhmfno = ezait6;

--不同的数据类型

--vhmfno ==> 整数

--ezait6 ==> nchar(8)

运行查询后,出现以下错误:

-- Error : SQL0802 - Data conversion or data mapping error.

我怀疑它靠近不同的数据类型 我的一个表“ezait6”中有一个 nvarchar 列。 那么我应该如何将该值转换为 INT 类型。

【问题讨论】:

  • 你可以 vhmfno=CONVERT(INT,ezait6),但是如果 ezait6 不仅有数字数据,它会抛出异常。
  • 使用上面的评论建议也可以为每列设置表的别名 put aleas name.column name 可能会解决问题。
  • 好像你需要调整你的表定义...(如果你想用 nchar(8) 加入 Integer,那就错了。)

标签: sql sql-server type-conversion sqldatatypes


【解决方案1】:

您可以先检查 varchar 字段的内容是否为数字,然后仅查询:

SELECT ezait6 AS "MO No",
       vhitno AS "Item No",
       vhrefd AS "Finish Date",
       vhmaqa AS "Manuf Qty",
       vhmaun AS "U/M"
FROM m3edbtest.mwohed,
     m3edbtest.cinacc
WHERE IsNumeric(ezait6)=1
      AND ezcono = 1
      AND vhcono = ezcono
      AND vhrefd >= '20170801'
      AND vhrefd <= '20170831'
      AND vhmfno = CONVERT(INT,ezait6);

【讨论】:

  • 服务器是MSSQL实例吗?
  • 没有。仅限 WinSql
  • 您可以不使用 IsNumeric 进行检查,而只能使用 CONVERT 部分。但这是不安全的。如果 CONVERT 未启用,请检查 CAST(ezait6 as INTEGER)
  • 如果我使用 CAST(ezait6 as INTEGER),也会出现同样的错误。
猜你喜欢
  • 2016-07-06
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
相关资源
最近更新 更多