我需要根据以下条件在EXPIRATION_DATE
PERMIT
表的ATR_CERT_DATE
Facility
表格中插入数据
如果ATR_CERT_DATE介于1/1(m / day)和7/31(m / day)之间,那么 EXPIRATION_DATE是12/31 / YY(当年)
如果ATR_CERT_DATE介于8/1 / YY和12/31 / YY之间,那么EXPIRATION_DATE 是12/31 / YY + 1(明年)
例如,
ATR_CERT_DATE
中的数据如下所示
ATR_CERT_DATE
----
1996-12-30
2001-01-22
EXPIRATION_DATE
中的预期结果应该是
EXPIRATION_DATE
----
1997-12-31
2001-12-31
我试过了:
SELECT DISTINCT ATR_CERT_DATE
,CASE
WHEN CONVERT(VARCHAR(2), MONTH(ATR_CERT_DATE)) + '-' + CONVERT(VARCHAR(2), DAY(ATR_CERT_DATE)) BETWEEN '01-01' AND '07-31'
THEN cast(datepart(yyyy, ATR_CERT_DATE) AS VARCHAR) + '-' + '12-31'
WHEN CONVERT(VARCHAR(2), MONTH(ATR_CERT_DATE)) + '-' + CONVERT(VARCHAR(2), DAY(ATR_CERT_DATE)) BETWEEN '08-01' AND '12-31'
THEN cast(datepart(yyyy, DATEADD(year, 1, ATR_CERT_DATE)) AS VARCHAR) + + '-' + '12-31'
ELSE '2'
END AS Effective_date
FROM facility.[dbo].[UST_ATR_HISTORY]
WHERE ATR_CERT_DATE IN (
'1996-12-30'
,'2001-01-22'
)
此查询几乎提供了预期的结果,除了它是varchar而不是所需的datetime类型。我怎样才能从中获取DateTime?
答案 0 :(得分:2)
试试这个:
SELECT DISTINCT
ATR_CERT_DATE,
case
when month(ATR_CERT_DATE) <= 7
then dateadd(yyyy, datediff(yyyy, 0, ATR_CERT_DATE) + 1, -1)
else dateadd(yyyy, datediff(yyyy, 0, ATR_CERT_DATE) + 2, -1)
end as Effective_date
FROM facility.[dbo].[UST_ATR_HISTORY]
WHERE ATR_CERT_DATE IN ('1996-12-30','2001-01-22')
首选,因为我们无法从日期转换为字符串并再次返回,此处我们只是保留日期类型。
答案 1 :(得分:1)
要将处理过的数据插入console.log("Hello World")
表,您可以使用
Permit
(如果您使用的是SQL Server 2012或更高版本,可以稍微简化一下。)
示例输入:
INSERT INTO [Permit] ([ID], [EXPIRATION_DATE])
SELECT [ID],
[EXPIRATION_DATE] =
CASE
WHEN DATEPART(month, UAH.ATR_CERT_DATE) < 8
THEN CAST((CONVERT(VARCHAR, DATEPART(YEAR, UAH.ATR_CERT_DATE)) + '-12-31') AS DATETIME)
ELSE CAST((CONVERT(VARCHAR, DATEPART(YEAR, UAH.ATR_CERT_DATE) + 1) + '-12-31') AS DATETIME)
END
FROM [UST_ATR_HISTORY] AS UAH
示例结果:
ID ATR_CERT_DATE
----------- -----------------------
1 1996-12-30 00:00:00.000
77 2001-01-22 00:00:00.000
答案 2 :(得分:0)
简单的方法是将您已经重新获得的varchar数据转换回日期时间。您将查询包装在仅进行转换的外部查询中:
SELECT CAST(a.EXPIRATION_DATE as datetime) as EXPIRATION_DATE
FROM
(
[Your existing query]
) as a
这不会解决问题的原因,但它应该能够提供您想要的结果。