耆那教,它看起来像你想的代码in the answer here适应自己的情况。 Andomar在那里做的是从一个只包含单个值的子查询中选择信息,因为他无法访问原始海报的源代码和表格。这样做可以让每个人都可以运行并查看它,无论他们碰巧拥有哪种数据库模式。
将这样的内容适配到自己的代码中将非常简单:只需将alias.column
引用(这里是sub.Dt
)替换为您自己的值,然后将您的表放入FROM子句而不是子查询中。因此,如果你的表被命名为SomeTable
,和您的列被命名为FetchTime
,查询变为:
select
convert(datetime, substring(SomeTable.FetchTime,1,4) + '-' +
substring(SomeTable.FetchTime,5,2) + '-' +
substring(SomeTable.FetchTime,7,2) + ' ' +
substring(SomeTable.FetchTime,9,2) + ':' +
substring(SomeTable.FetchTime,11,2) + ':' +
substring(SomeTable.FetchTime,13,2))
from
SomeTable
理论上你就可以有一个问题,如果你FetchTime
场被存储为整数:SUBSTRING()可能不会对这些数据的工作类型。要解决这一点,你可以CAST()
价值为varchar,就像这样:
select
convert(datetime, substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),1,4) + '-' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),5,2) + '-' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),7,2) + ' ' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),9,2) + ':' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),11,2) + ':' +
substring(CAST(SomeTable.FetchTime AS VARCHAR(20)),13,2))
from
SomeTable
或者,如果你只是单值之后,就可以回到原来的查询和简单的写:
select
convert(datetime, substring(sub.Dt,1,4) + '-' +
substring(sub.Dt,5,2) + '-' +
substring(sub.Dt,7,2) + ' ' +
substring(sub.Dt,9,2) + ':' +
substring(sub.Dt,11,2) + ':' +
substring(sub.Dt,13,2))
from
(select CAST(FetchTime AS VARCHAR(20)) as Dt FROM SomeTable) sub
convert/substr有什么问题?它看起来像它做你想要的? – 2014-10-20 15:17:55
尽管该值可能会巧合地存储为数字类型,但出于转换目的,该数字没有有意义的日期/时间表示。为此,它需要被视为一个字符串。现有的方法(从子串构造日期/时间)似乎是合理的。 – David 2014-10-20 15:20:04
@AlexK。谢谢回复。是的,它只转换'20100101000000'值。我怎么能用这个来转换列中的所有记录? – Jain 2014-10-20 15:22:38