我在表格中有这个
TempTable
Id Date
1 1-15-2010
2 2-14-2010
3 3-14-2010
4 4-15-2010
我想改变每一条记录,以便它们在同一天,也就是第15天 像这样
TempTable
Id Date
1 1-15-2010
2 2-15-2010 <--change to 15
3 3-15-2010 <--change to 15
4 4-15-2010
如果我喜欢30号怎么办?
记录应
TempTable
Id Date
1 1-30-2010
2 2-28-2010 <--change to 28 because feb has 28 days only
3 3-30-2010 <--change to 30
4 4-30-2010
谢谢
答案 0 :(得分:1)
您可以使用DATEADD
/ DATEDIFF
:
create table T (
ID int not null,
DT date not null
)
insert into T (ID,DT)
select 1,'20100115' union all
select 2,'20100214' union all
select 3,'20100314' union all
select 4,'20100415'
SELECT ID,DATEADD(month,DATEDIFF(month,'20100101',DT),'20100115')
from T
SELECT ID,DATEADD(month,DATEDIFF(month,'20100101',DT),'20100130')
from T
结果:
ID
----------- -----------------------
1 2010-01-15 00:00:00.000
2 2010-02-15 00:00:00.000
3 2010-03-15 00:00:00.000
4 2010-04-15 00:00:00.000
ID
----------- -----------------------
1 2010-01-30 00:00:00.000
2 2010-02-28 00:00:00.000
3 2010-03-30 00:00:00.000
4 2010-04-30 00:00:00.000
基本上,在DATEADD / DATEDIFF中,您为两者指定相同的组件(即月份)。然后,第二个日期常量(即'20100130')指定您希望从第一个日期(即'20100101')申请的“抵消”,这将“覆盖”您未保留的日期部分。我通常的例子是希望从日期时间值中删除时间部分:
SELECT DATEADD(day,DATEDIFF(day,'20010101',<date column>),'20100101')
答案 1 :(得分:0)
您也可以尝试类似
的内容UPDATE TempTable
SET [Date] = DATEADD(dd,15-day([Date]), DATEDIFF(dd,0,[Date]))
我们有一个计算一个月第一天的函数,所以我只是加上它来计算15而不是......