2012-09-30 154 views
0

我有兩列「文本」數據類型,我需要將第一列中的全部數據轉換爲「日期時間」數據類型,第二列轉換爲「十進制(10,3)」數據類型。當前數據的SQL轉換數據類型

例子: 第一列:20090901000005隱蔽到2009/08/01 00:00:05 第二欄:.125轉換爲00.125

任何一個可以幫助請:)

回答

0

您可以使用左,右分割字符串分成幾部分。然後使用convert函數將其轉換爲日期。 ODBC規範(120)的格式是:YYYY-MM-DD HH:MI:SS

CONVERT(datetime, 
    left(firstcol, 4) + '-' + 
    left(right(firstcol, 10) ,2) + '-' + 
    left(right(firstcol, 8) ,2) + ' ' + 
    left(right(firstcol, 6) ,2) + ':' + 
    left(right(firstcol, 4) ,2) + ':' + 
    right(firstcol, 2) 
    , 120) 

對於第二列:

CONVERT(float, right(secondcol, 3))/1000 
+0

消息8116,級別16,狀態1,行1 參數數據類型文本對左函數的參數1無效。 – Thamir

+0

你應該將文本投射到varchar。 – danihp

+0

ou應該將文本投射到varchar。子字符串函數可以做這個工作,請參閱@vicdor答案。 – danihp

1

可以使用這樣的:

select cast(cast(col1 as varchar(8)) as datetime) + 
    cast(left(right(cast(col1 as varchar(14)), 6), 2) + ':' + 
    substring(right(cast(col1 as varchar(14)), 6), 2, 2) + ':' + 
    right(right(cast(col1 as varchar(14)), 6), 2) as datetime) newDate, 
    cast(cast(col2 as varchar(10)) as decimal(10, 3)) newDecimal 
from yourtable 

SQL Fiddle with Demo

+0

消息8114,級別16,狀態5,行1 將數據類型varchar轉換爲數字時出錯。 – Thamir

+0

不知道爲什麼你會收到錯誤,SQL小提琴顯示它正在工作。 – Taryn

0

我會這樣做:

SELECT 
    CONVERT(DATETIME, 
     (SUBSTRING(dateValue, 1, 8) + ' ' + 
     SUBSTRING(dateValue, 9, 2) + ':' + 
     SUBSTRING(dateValue, 11, 2) + ':' + 
     SUBSTRING(dateValue, 13, 2))) as 'dateValue', 
    CONVERT(DECIMAL(10, 3), decimalValue) as 'decimalValue' 
FROM text_table 
+0

日期轉換工作正常,但沒有轉換十進制值,它給我的錯誤! – Thamir

+0

這是十進制錯誤:消息529,級別16,狀態2,行3 不允許將數據類型文本顯式轉換爲十進制。 – Thamir