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,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)
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...