首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从具有混合字符串和整数值的WHERE列中选择,抛出转换失败,将varchar转换为数据类型int

从具有混合字符串和整数值的WHERE列中选择,抛出转换失败,将varchar转换为数据类型int
EN

Stack Overflow用户
提问于 2021-09-14 04:01:54
回答 1查看 84关注 0票数 0

我还没有发现一个与我的问题类似的问题,可能是因为我甚至不知道如何问这个问题,但是我有这个表,其中有几个列,其中很多是char(4)类型的。

该问题的列具有如下值:

代码语言:javascript
复制
|PRODUCT_CATEGORIES06|
|--------------------|
|FNCY|
|   2|
|   3|
|GRN |
|STD |
|    |
|COMB|
|   1|
|CHO |

所以,当我这么做的时候:小提琴

代码语言:javascript
复制
SELECT RPO.REFERENCE_NUMBER, PM.PRODUCT_CATEGORIES06
FROM Table1 RPO
INNER JOIN Table2 PM ON PM.PRODUCT = RPO.PRODUCT
WHERE RPO.REFERENCE_NUMBER = '00012122'
GROUP BY RPO.REFERENCE_NUMBER, PM.COMMODITY, PM.PRODUCT_CATEGORIES01, PM.PRODUCT_CATEGORIES06

我得到:

代码语言:javascript
复制
|REFERENCE_NUMBER   |PRODUCT_CATEGORIES06|
|-------------------|--------------------|
|00012122           |1                   |
|00012122           |3                   |
|00012122           |GRN                 |

但当我这么做的时候:小提琴

代码语言:javascript
复制
SELECT RPO.REFERENCE_NUMBER, PM.PRODUCT_CATEGORIES06
FROM Table1 RPO
INNER JOIN Table2 PM ON PM.PRODUCT = RPO.PRODUCT
WHERE PM.PRODUCT_CATEGORIES06 = 1 
  AND RPO.REFERENCE_NUMBER = '00012122'
GROUP BY RPO.REFERENCE_NUMBER, PM.COMMODITY, PM.PRODUCT_CATEGORIES01, PM.PRODUCT_CATEGORIES06

它尝试将GRN转换为int并抛出此错误:

将varchar值“GRN”转换为数据类型int时,转换失败。

我试过使用CHAR函数,但我只是在黑暗中拍摄,我真的不知道该怎么做。

我知道设计是不好的,买我没有做这个,而且,我不能改变它。

如何修复查询?

编辑添加了小提琴链接

或尝试:

代码语言:javascript
复制
CREATE TABLE [dbo].[Table1](
    [REFERENCE_NUMBER] [char](8) NOT NULL,
    [PRODUCT] [char](12) NOT NULL,
)

CREATE TABLE [Table2](
    [PRODUCT] [char](12) NOT NULL,
    [PRODUCT_CATEGORIES06] [char](4) NOT NULL
)

INSERT INTO Table1 (REFERENCE_NUMBER, PRODUCT) VALUES ('REF1','PRODUCT1') 
INSERT INTO Table1 (REFERENCE_NUMBER, PRODUCT) VALUES ('REF1','PRODUCT2')
INSERT INTO Table1 (REFERENCE_NUMBER, PRODUCT) VALUES ('REF1','PRODUCT3')

INSERT INTO Table2 (PRODUCT, PRODUCT_CATEGORIES06) VALUES ('PRODUCT1',1)
INSERT INTO Table2 (PRODUCT, PRODUCT_CATEGORIES06) VALUES ('PRODUCT2',2)
INSERT INTO Table2 (PRODUCT, PRODUCT_CATEGORIES06) VALUES ('PRODUCT3','GRN')

--works without product category on where
SELECT RPO.REFERENCE_NUMBER, PM.PRODUCT_CATEGORIES06
FROM Table1 RPO
INNER JOIN Table2 PM ON PM.PRODUCT = RPO.PRODUCT
WHERE RPO.REFERENCE_NUMBER = 'REF1'
GROUP BY RPO.REFERENCE_NUMBER, PM.PRODUCT_CATEGORIES06

-- doesn't work, this error I'm trying to find a solution
SELECT RPO.REFERENCE_NUMBER, PM.PRODUCT_CATEGORIES06
FROM Table1 RPO
INNER JOIN Table2 PM ON PM.PRODUCT = RPO.PRODUCT
WHERE PM.PRODUCT_CATEGORIES06 = 1
AND RPO.REFERENCE_NUMBER = 'REF1'
GROUP BY RPO.REFERENCE_NUMBER, PM.PRODUCT_CATEGORIES06
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-14 04:29:05

这条线

代码语言:javascript
复制
PM.PRODUCT_CATEGORIES06 = 1 

使Server尝试将所有值转换为int,因为未引用的1是int。将其更正为字符串,因为您的列数据是字符串:

代码语言:javascript
复制
PM.PRODUCT_CATEGORIES06 = '1' 

而且它是有效的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69171648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档