将Varchar列转换为datetime

时间:2013-09-13 01:14:15

标签: sql

我有两列,如下所示。 ColumnA是varchar。 9bd是分配号码,10是会计年度,07是月份,其余是唯一ID。 ColumnB是日期时间。

ColumnA            ColumnB  
9db1007000001      8/7/2011

我想将ColumnA分为Month列(datetime)和Year列(datetime)。

ColumnA所需的结果:

Column Month     Column Year 
7                 2010

OR

7                 10

我可以将ColumnB分隔为Month列和Year列。这是我尝试的SQL脚本。

SELECT
ColumnA,
DATEPART(mm, (ColumnB))    as Month,
DATEPART(yy, (ColumnB))    as YEAR
FROM MY TABLE

有人可以帮忙吗?我在这个网站上搜索并发现了类似的问题,但是我尝试过的脚本会产生错误

--Conversion failed when converting datetime from character string.

SELECT
CAST(SUBSTRING(ColumnB, 5, 2) + SUBSTRING(ColumnB, 3, 2) AS DATETIME) Month_Year 
FROM MY TABLE
顺便说一下,这个DATEPART(yy, (ColumnB))函数返回2011.它怎么能返回11呢? 或者我应该提交另一个问题?

1 个答案:

答案 0 :(得分:0)

从字符串到datetime的转换需要字符串格式正确,这也取决于您的数据库设置。

关于获得最后两位数的第二个问题,我建议使用模数而不是减法 - 你永远不知道它是2000还是1900,除非你是100%它是2000

一个简单的例子:

SELECT  SUBSTRING(columnA, 4, 2) AS FiscalMonth,
        SUBSTRING(columnA, 6, 2) AS FiscalYear,
        CAST(SUBSTRING(columnA, 6, 2) + '-01-'  + SUBSTRING(columnA, 4, 2)  AS DATETIME) Fiscal, -- in format of YY-dd-MM, but this really depends on your settings
        DATEPART(MM, ColumnB) AS [Month],
        DATEPART(YY, ColumnB) % 100 AS [Year]
FROM    yourTable;