我正在尝试将期间列表转换为月份的第一天。期间和新产出的例子下面将期间转换为月份的第一天
Period new_date
DEC-16 01/12/2016
JAN-17 01/01/2017
FEB-17 01/02/2017
我已经尝试了一些东西,但我被卡住不同类型。我也希望以最有效的方式做到这一点,因为它是一张相当大的桌子。
我在SQL服务器
我正在尝试将期间列表转换为月份的第一天。期间和新产出的例子下面将期间转换为月份的第一天
Period new_date
DEC-16 01/12/2016
JAN-17 01/01/2017
FEB-17 01/02/2017
我已经尝试了一些东西,但我被卡住不同类型。我也希望以最有效的方式做到这一点,因为它是一张相当大的桌子。
我在SQL服务器
对不起,我以前的答案这样做,我误会了。你想这个代替:
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]
同一个问题上的多个答案有什么意义?如果其中一个错误,您应该一起编辑/删除它并在其中添加新的信息。 –
SELECT DATEADD(月,DATEDIFF(每月,0,CAST( '1 - ' +左(周期,3)+右(期,3)日期)),0) AS StartOfMonth从[TABLE_NAME]
试试这个,
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
所以这里有什么问题?你为什么不告诉我们你试过的东西,告诉我们你不喜欢的结果是什么?你需要问一个具体的问题。我们不会为你做这项工作。 –
这不是一个时期,它只是一个字符串。在它上面加上'01-'并且投射到目前为止。这假设你使用的英文语言环境*和*你不关心Y2K问题。 –
问题是如何将该字符串转换为日期。 – user2772056