首页 > 解决方案 > 如何在 SQL SERVER 中实现 SET_DATE_PART

问题描述

我想实现 Informatica 的 SET_DATE_PART 函数,它将日期列的一部分设置为 SQL Server 中的特定值。我有一个表达式,我试图在其上实现任何类似于SET_DATE_PARTInformatica 函数的函数。这个表达

case 
when ISDATE(SUBSTRING(COLUMN,1,7))=1 and CAST(SUBSTRING(COLUMN,1,2) AS INTEGER)<=7 then 
DATEADD(MM,-1,CONVERT(DATE,SUBSTRING(COLUMN,1,7),106)) 
ELSE CONVERT(DATE,SUBSTRING(COLUMN,1,7),106)
END AS TRANSFORMED  FROM TABLE
ORDER BY 1

YYYY-MM-DD对我来说工作正常并以格式返回日期值。现在我想将表达式的日期部分中的值设置为 01。我尝试了 SQL 服务器的许多功能,例如 DATEPART、DATEADD,但没有任何效果

标签: sql-serverinformatica

解决方案


简化您的问题,让我们假设您已经拥有数据类型为date. 一旦你有了它,你可以得到一个不同的日期,它与提供的日期和月份相同,但日期设置为 1,如下所示:

declare @d date = sysdatetime();
select @d as old, DATEFROMPARTS(
    datepart(year, @d),
    datepart(month, @d),
    1
) as new;

推荐阅读