2013-01-31 121 views
14

我有一個字段是VARCHAR(6)我試圖將其插入到bigint類型的另一個表這是給我一個錯誤SQL,如何將VARCHAR轉換爲bigint?

(錯誤的數據類型爲varchar轉換爲bigint

這裏是我在做什麼

CONVERT(bigint, seconds) as seconds 

任何人可以用這個問題上需要幫助?

+0

你檢查數據,以確保在你轉換字段中的值實際上是轉換成int? –

+0

似乎你的varchar之一是不可兌換的... –

+0

我讓它有一個null, - 數字和正數!但我做了isnull(秒,0),我仍然有相同的問題 轉換(bigint,ISNULL(ts.TimeInSeconds,0))AS秒 – Jaylen

回答

17

這就是答案

(CASE 
    WHEN 
    (isnumeric(ts.TimeInSeconds) = 1) 
    THEN 
    CAST(ts.TimeInSeconds AS bigint) 
    ELSE 
    0 
    END) AS seconds 
+2

可能要編輯這是正確的,因爲'isnumiric'將不存在(拼寫檢查)。另外,即使'CONVERT()'(和'ISNUMERIC()')在你的機器上工作,你已經將你的問題標記爲'sql',這是一個_language_ - 你的機器有一個特定的_implementation_(SQL Server)。標準是'CAST(... as BIGINT)' - 對未來的觀衆來說,最好是用相關的RDBMS標記你的問題,或者寫一個'標準'版本。 –

+0

謝謝你:) – Jaylen

+0

所以你想要的是如果'TimeInSeconds'中的值是一個有效的整數就插入'1',如果它不是一個有效的整數,則是'0'?你不想讓'TimeInSeconds'列中的值插入某處嗎? –

1

的替代辦法是做這樣的事情:

SELECT 
    CAST(P0.seconds as bigint) as seconds 
FROM 
    (
    SELECT 
     seconds 
    FROM 
     TableName 
    WHERE 
     ISNUMERIC(seconds) = 1 
    ) P0 
2

我覺得你的代碼是正確的。如果運行以下代碼,它將轉換字符串'60',該字符串被視爲varchar,並返回整數60,如果其中包含字符串的整數包含字符串,則返回該值。

select CONVERT(bigint,'60') as seconds 

,並返回

60 
相關問題