2011-04-12 82 views
2

我想將VARCHAR轉換爲INT,但在我的表中我有一些值'???'那麼SQL Server啓動這個表達式:SQL:如何在查詢中使用大小寫和強制轉換?

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 

但沒有任何工程..

任何想法的傢伙?

回答

6

你可能只是想解決這個一般和處理任何非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 

看到這個question

+0

@非常感謝您的幫助夥計,你們搖滾! – 2011-04-12 22:31:52

3

我相信你會想是

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(無論是MVYEAR或NULL),然後你想要的內容投射到對案件的結果進行操作。

0
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 
0
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 
0

你也可以使用:

CAST(NULLIF(movies.mvyear,'????') AS INT)