-1

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

ColumnA            ColumnB  
9db1007000001      8/7/2011

我想将 ColumnA 分成月份列(日期时间)和年份列(日期时间)。

来自 ColumnA 的期望结果:

Column Month     Column Year 
7                 2010

或者

7                 10

我可以将 ColumnB 分成月列和年列。这是我尝试的 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 呢?还是我应该提交另一个问题?

4

1 回答 1

0

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

对于关于获取最后两位数的第二个问题,我建议使用模数而不是减法 - 你永远不知道它是 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;  
于 2013-09-13T01:44:12.827 回答