2017-03-01 37 views
-3

我正在尝试将期间列表转换为月份的第一天。期间和新产出的例子下面将期间转换为月份的第一天

Period new_date 
DEC-16 01/12/2016 
JAN-17 01/01/2017 
FEB-17 01/02/2017 

我已经尝试了一些东西,但我被卡住不同类型。我也希望以最有效的方式做到这一点,因为它是一张相当大的桌子。

我在SQL服务器

+2

所以这里有什么问题?你为什么不告诉我们你试过的东西,告诉我们你不喜欢的结果是什么?你需要问一个具体的问题。我们不会为你做这项工作。 –

+0

这不是一个时期,它只是一个字符串。在它上面加上'01-'并且投射到目前为止。这假设你使用的英文语言环境*和*你不关心Y2K问题。 –

+0

问题是如何将该字符串转换为日期。 – user2772056

回答

0

对不起,我以前的答案这样做,我误会了。你想这个代替:

SELECT [Period], DATEADD(
    Month, 
    CASE LEFT([Period], 3) WHEN 'JAN' THEN 1 WHEN 'FEB' THEN 2 WHEN 'MAR' THEN 3 WHEN 'APR' THEN 4 WHEN 'MAY' THEN 5 WHEN 'JUN' THEN 6 WHEN 'JUL' THEN 7 WHEN 'AUG' THEN 8 WHEN 'SEP' THEN 9 WHEN 'OCT' THEN 10 WHEN 'NOV' THEN 11 WHEN 'DEC' THEN 12 END - 1, 
    DATEADD(Year, CAST(SUBSTRING([Period], 5, 100) as int), '2000-01-01')) AS [new_date] 
FROM (
    SELECT 'DEC-16' as [Period] 
    UNION ALL SELECT 'JAN-17' AS [Period] 
    UNION ALL SELECT 'FEB-17' AS [Period] 
) AS [TEST] 
+0

同一个问题上的多个答案有什么意义?如果其中一个错误,您应该一起编辑/删除它并在其中添加新的信息。 –

-2

SELECT DATEADD(月,DATEDIFF(每月,0,CAST( '1 - ' +左(周期,3)+右(期,3)日期)),0) AS StartOfMonth从[TABLE_NAME]

0

试试这个,

declare @t table(Period varchar(50)) 
insert into @t VALUES 
('DEC-16') 
,('JAN-17') 
,('FEB-17') 


select Period, cast('01-'+Period as date) new_Date 
from @t 
相关问题