2016-02-23 33 views
0

我在Teradata上。我有一個ID列,看起來像這樣:SQL - 更改字母數字列的數據類型

23 
34 
W7 
007 
021 
90 
GS8 

我想這些數字轉換爲數值,因此007應該是7和021是21.當數被存儲爲一個字符串,我通常做column * 1到轉換爲數字,但在這種情況下,它給了我一個不好的字符錯誤,因爲那裏有字母。

我該如何在查詢中的select語句中執行此操作?

+0

「W7」的理想數值是多少? –

回答

1

假設數值總是以數字開頭,那麼這樣的事情應該工作:

update t 
    set col = (case when substr(col, 1, 1) between '0' and '9' 
        then cast(cast(col as int) as varchar(255)) 
        else col 
       end); 

或者,你可以忘記的轉換,做:

update t 
    set col = trim(leading '0' from col); 

注:這兩個假設如果第一個字符是數字,那麼整個字符串包含數字。第二種假定值不是全爲零(或者更確切地說,返回空字符串)。

0

只需使用TO_NUMBER(col),當轉換失敗時返回NULL。

+0

這裏的字母數字值會發生什麼 - 保持原樣還是變爲空? – Moosa

+0

@Moosa:只需嘗試一下,轉換就會失敗,並且會返回NULL – dnoeth

相關問題