问题描述
|
我想将VARCHAR转换为INT,但是在我的表中我有一些值,例如\'??? \',然后SQL Server启动此Expcetion:
Conversion failed when converting the varchar value \'????\' to data type int.
Severity 16
我可以将\'??? \'转换为NULL,这没问题,但是怎么办?
我正在尝试执行以下操作:
INSERT INTO labbd11..movie(title,year)
SELECT movies.title,CASE movies.mvyear IS \'????\' THEN NULL ELSE CAST (movies.mvyear AS INT)
FROM disciplinabd..movies
但是什么都没有..
有什么想法吗?
解决方法
您可能只想一般地解决此问题,并以相同方式处理任何非整数值
INSERT INTO labbd11..movie(title,year)
SELECT movies.title,CASE WHEN IsNumeric(movies.mvyear+ \'.0e0\') <> 1 THEN NULL
ELSE CAST (movies.mvyear AS INT) END
FROM disciplinabd..movies
看到这个问题
,我相信你会想要像
INSERT INTO labbd11..movie(title,year)
SELECT movies.title,CAST( CASE movies.mvyear
WHEN \'????\' THEN NULL
ELSE movies.mvyear
END AS INT)
FROM disciplinabd..movies
您希望您的CASE语句返回一个VARCHAR(“ 4”或NULL),然后您希望CAST对CASE的结果进行操作。
, INSERT INTO labbd11..movie(title,CASE WHEN movies.mvyear = \'????\' THEN NULL
ELSE CAST (movies.mvyear AS INT) END
FROM disciplinabd..movies
,INSERT INTO labbd11..movie(title,year)
SELECT
movies.title,CAST(CASE WHEN movies.mvyear = \'????\' THEN NULL ELSE movies.mvyear END AS INT)
FROM
disciplinabd..movies
,您还可以使用:
CAST(NULLIF(movies.mvyear,\'????\') AS INT)