SQL转换数据类型

时间:2012-09-30 16:57:01

标签: sql sql-server sql-server-2012

我有两个带有“text”数据类型的列,我需要将第一列中的整个数据转换为“datetime”数据类型,并将第二列转换为“decimal(10,3)”数据类型。

当前数据示例: 第一栏:20090901000005隐藏到2009/08/01 00:00:05 第二栏:.125转换为00.125

任何人都可以帮忙请:)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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