Sql 将数据类型varchar转换为数字
Msg 8114,16级,状态5,程序SPCETDETAILS,第88行 将数据类型varchar转换为数字时出错 我已经将这个@mfr_id转换为int类型,然后也得到了上面的错误 我在执行存储过程时出错 我得到的错误是:Sql 将数据类型varchar转换为数字,sql,sql-server,tsql,Sql,Sql Server,Tsql,Msg 8114,16级,状态5,程序SPCETDETAILS,第88行 将数据类型varchar转换为数字时出错 我已经将这个@mfr_id转换为int类型,然后也得到了上面的错误 我在执行存储过程时出错 我得到的错误是: if(@mfr_id = 5) 最新答案 看来@mfr_id是一个varchar。为了避免语法问题,请使用OMG Ponies post中的答案 但是你也说它正在存储字符串12,3,4。。。。。。因此,从语义上讲,如果IF语句包含值“5”,您是否希望它为true 如果是这
if(@mfr_id = 5)
最新答案
看来@mfr_id是一个varchar。为了避免语法问题,请使用OMG Ponies post中的答案
但是你也说它正在存储字符串12,3,4。。。。。。因此,从语义上讲,如果IF语句包含值“5”,您是否希望它为true
如果是这样,你可能需要这样的东西
set @mfr_id = REPLACE(@mfr_id, ' ','')
if ((@mfr_id LIKE '5,%') OR (@mfr_id LIKE '%,5,%') OR (@mfr_id LIKE '%,5'))
原始答案-过时
希望你能成功。有关详细信息,请参阅。虽然实际上我认为应该隐式转换。@mfr\u id的值是多少?我想它应该会在错误消息中告诉您这一点。更新了答案
看来@mfr_id是一个varchar。为了避免语法问题,请使用OMG Ponies post中的答案
但是你也说它正在存储字符串12,3,4。。。。。。因此,从语义上讲,如果IF语句包含值“5”,您是否希望它为true
如果是这样,你可能需要这样的东西
set @mfr_id = REPLACE(@mfr_id, ' ','')
if ((@mfr_id LIKE '5,%') OR (@mfr_id LIKE '%,5,%') OR (@mfr_id LIKE '%,5'))
原始答案-过时
希望你能成功。有关详细信息,请参阅。虽然实际上我认为应该隐式转换。@mfr\u id的值是多少?我认为它应该在错误消息中告诉您这一点。使用:
if(@mfr_id = '5')
值比较必须是相同的数据类型,或者必须进行隐式数据类型转换。显式转换(使用时)是维护的理想选择,因为操作是显而易见的
根据您的需要,该功能可能会有所帮助。请小心为[n]varchar变量定义长度。使用:
if(@mfr_id = '5')
值比较必须是相同的数据类型,或者必须进行隐式数据类型转换。显式转换(使用时)是维护的理想选择,因为操作是显而易见的
根据您的需要,该功能可能会有所帮助。请小心定义[n]varchar变量的长度。此答案使用Oracle的PL/SQL语法和Oracle正则表达式例程之一编写。我对t-SQL不太了解,无法转录它,但我希望类似的功能也可用:
FOR aRow IN
(WITH DATA AS (SELECT @mfg_id AS S FROM DUAL)
SELECT REGEXP_SUBSTR(S, '[^ ,]+', 1, LEVEL) AS NUM_STRING
FROM DATA
CONNECT BY LEVEL < LENGTH(S) - LENGTH(REGEXP_REPLACE(S, '[ ,]', '')))
LOOP
IF aRow.NUM_STRING = '5' THEN
NULL; -- do something appropriate here
END IF;
END LOOP;
共享和享受。此答案使用Oracle的PL/SQL语法和Oracle正则表达式例程之一编写。我对t-SQL不太了解,无法转录它,但我希望类似的功能也可用:
FOR aRow IN
(WITH DATA AS (SELECT @mfg_id AS S FROM DUAL)
SELECT REGEXP_SUBSTR(S, '[^ ,]+', 1, LEVEL) AS NUM_STRING
FROM DATA
CONNECT BY LEVEL < LENGTH(S) - LENGTH(REGEXP_REPLACE(S, '[ ,]', '')))
LOOP
IF aRow.NUM_STRING = '5' THEN
NULL; -- do something appropriate here
END IF;
END LOOP;
分享和享受。Ah在这种情况下,请将表达式的另一面设置为字符串if@mfr_id = '5'. 我可以检查您是否需要相等,并且您没有尝试执行包含类型检查吗?如果@mfr\u id的值不是数字,这将失败,请尝试:declare@mfr\u id varchar5;设置@mfr_id='A';ifCONVERTint,@mfr_id=5 PRINT'将得到一个错误是的,在更新我的答案以反映评论之前,我一直在等待OP回复。我现在就做。啊,在这种情况下,让表达式的另一边是一个带if@mfr_id = '5'. 我可以检查您是否需要相等,并且您没有尝试执行包含类型检查吗?如果@mfr\u id的值不是数字,这将失败,请尝试:declare@mfr\u id varchar5;设置@mfr_id='A';ifCONVERTint,@mfr_id=5 PRINT'将得到一个错误是的,在更新我的答案以反映评论之前,我一直在等待OP回复。我现在就做。@mfr\u id变量声明为什么?@OMG Ponies@mfr\u id是varchar,但它存储的是12,3,4。从注释到我的答案。@mfr\u id变量声明为什么?@OMG Ponies@mfr\u id是varchar,但它存储的是12,3,4。从评论到我的回答。