sql - 日期时间的日期修剪
问题描述
我想创建一个带参数 datepart、datevalue 的 Datetrim 函数。它应该从 datevalue (这是一个日期时间)返回一个日期时间,每个日期部分都小于修剪的 datepart 参数。
例如:
(year,'20180703 11:32:45.333')
应该返回20180101 00:00:00.000
(month,'20180703 11:32:45.333')
应该返回20180701 00:00:00.000
我想正文的代码将是 datepart 的一个案例,其中包含所有可能的 dateadd-datediff 组合。问题是,我可以让我的 datepart 参数与 dateadd/datediff 函数的 datepart 参数类型相同(我不知道)吗?
还是我只是将其设为 varchar 并在案例中手动编写日期部分?
解决方案
你可以dateadd()
使用datediff()
如下
declare @dt datetime = '20180703 11:32:45.333',
@flag int = 1
select dateadd(year, datediff(year, 0, @dt), 0) as [Year],
dateadd(month, datediff(month, 0, @dt), 0) as [Month],
case @flag
when 1 then dateadd(year, datediff(year, 0, @dt), 0)
when 2 then dateadd(month, datediff(month, 0, @dt), 0)
end
推荐阅读
- android - 使用 minifyEnabled true 后的 android studio 错误
- android - Navigation Drawer 项目应该是静态的还是动态的?
- ubuntu - 无法在 ubuntu 16.04 上启动 meld,因为错误 import meld.conf
- listview - 无法将水平可滚动的 ListView 包装在 Column 中
- javascript - 浏览器中的 Wacom 取消移动
- python - 如何在python中提取部分字符串(字符串长度可能会有所不同)
- ios - 将 UIButtons 添加到 ViewDidLoad 上的数组
- java - UserService NullPointerException Spring/Hibernate
- ms-access - 访问报告文本框在总计中给出 #Type 错误
- php - Azure PHP 函数转义字符串输出