Sql server 将期间转换为月份的第一天

Sql server 将期间转换为月份的第一天,sql-server,Sql Server,我正在尝试将时段列表转换为每月的第一天。下面是周期和新输出的示例 Period new_date DEC-16 01/12/2016 JAN-17 01/01/2017 FEB-17 01/02/2017 我已经尝试了很多方法,但是我被不同的类型卡住了。我还想以最有效的方式来做,因为它适用于相当大的桌子 我在SQL server中执行此操作对不起,我之前的回答被误解了。您希望这样做: SELECT [Period], DATEADD( Month, CASE LEFT

我正在尝试将时段列表转换为每月的第一天。下面是周期和新输出的示例

Period  new_date
DEC-16  01/12/2016
JAN-17  01/01/2017
FEB-17  01/02/2017
我已经尝试了很多方法,但是我被不同的类型卡住了。我还想以最有效的方式来做,因为它适用于相当大的桌子


我在SQL server中执行此操作

对不起,我之前的回答被误解了。您希望这样做:

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]
选择DATEADD(月,DATEDIFF(月,0,强制转换('1-'+左(期间,3)+右(期间,3)作为日期)),0)作为[表名称]中的StartOfMonth

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问题。问题是如何将该字符串转换为日期。我刚刚在下面回答了这个问题。如果不清楚就道歉。我现在想明白了,在同一个问题上有多个答案有什么意义?如果其中一个错误,您应该一起编辑/删除它,并在其中添加新信息。