我有两列,如下所示。 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呢?
或者我应该提交另一个问题?
答案 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;