2012-09-30 59 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