SQL:如何用例并强制转换查询?

| 我想将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, year) 
    SELECT movies.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)
    

要回复问题请先登录注册