SQL:如何在查询中使用用例和强制转换?

Val*_*lva 2 sql database sql-server casting case

我想将VARCHAR转换为INT,但在我的表中我有一些像'???'的值 然后SQL Server启动此expcetion:

Conversion failed when converting the varchar value '????' to data type int.
Severity 16
Run Code Online (Sandbox Code Playgroud)

我可以转换这个'???' 为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
Run Code Online (Sandbox Code Playgroud)

但没有任何作用..

有什么想法吗?

Con*_*rix 8

您可能只想解决这个问题并以相同的方式处理任何非int值

 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
Run Code Online (Sandbox Code Playgroud)

看到这个问题


Jus*_*ave 5

我相信你会想要类似的东西

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
Run Code Online (Sandbox Code Playgroud)

您希望 CASE 语句返回一个 VARCHAR(MVYEAR或 NULL),然后您希望 CAST 对 CASE 的结果进行操作。