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