sql - SQL查询中如何计算过期日期
问题描述
我有这个查询到期日期计算及其工作正常,但结果显示在 - 例如:-9 年 4 个月和 5 天。
我想以正常的方式展示这一点,例如“在 9 年 4 个月零 5 天后过期”:
DECLARE @TempDate Datetime ,
@ExpiryDate Datetime,
@year int,
@month int,
@day int
SET @ExpiryDate = (SELECT TOP (1) [ExpiryDate] FROM [dbo].[Purchases] WHERE [ProductId] = 1)
SELECT @TempDate = @ExpiryDate
SELECT
@year = DATEDIFF(YEAR, @TempDate, GETDATE()) -
CASE
WHEN (MONTH(@ExpiryDate) > MONTH(GETDATE())) OR
(MONTH(@ExpiryDate) = MONTH(GETDATE()) AND DAY(@ExpiryDate) > DAY(GETDATE()))
THEN 1 ELSE 0
END
SELECT @TempDate = DATEADD(YEAR, @year, @TempDate)
SELECT @month = DATEDIFF(MONTH, @TempDate, GETDATE()) -
CASE
WHEN DAY(@ExpiryDate) > DAY(GETDATE())
THEN 1 ELSE 0
END
SELECT @TempDate = DATEADD(MONTH, @month, @TempDate)
SELECT @day = DATEDIFF(DAY, @TempDate, GETDATE())
SELECT @year AS Years, @month AS Months, @day AS [Days]
解决方案
如果我正确理解了您的问题,则计算将按您的预期进行,但您希望将Years
值作为正数而不是负数返回。如果是这种情况,您应该将 final 更改SELECT
为:
SELECT (@year * -1) AS Years, @month AS Months, @day AS [Days];
或者,如果您想将输出作为字符串返回(即在 9 年 4 个月零 5 天后过期),请将最终更改SELECT
为:
SELECT 'Expire in ' + CAST((@year * -1) AS VARCHAR(2)) + ' years '
+ CAST(@month AS VARCHAR(2)) + ' months and '
+ CAST(@day AS VARCHAR(2)) + ' day';
铸造 asVARCHAR(2)
假设您预计不超过 99 年,但您可能希望增加该数字。
推荐阅读
- javascript - 我如何只获取一次?
- webassembly - 如何在不手动检查的情况下找出网站是否使用 webassembly?
- python - SQLAlchemy 过滤器用于具有多个需求的多对多关系
- flutter - 内部监听 Provider
- javascript - 我需要编写一个循环,对 console.log 进行七次调用以输出以下倒三角形?
- java - 哪种 JDBC 批量删除策略最适合性能?
- reactjs - 如何使用 Local-Npm 在本地安装包
- react-native - 不变违规:requireNativeComponent:在 UIManager 中找不到“RNCSafeAreaProvider”
- matplotlib - matplotlib 中的热图网格
- javascript - 我如何解码代码?