请您告诉我如何创建一个列,显示每行的时间戳/日期,表示上个月的最后一天。例如:
Name Surname DOB Timestamp
John Smith 1970/04/20 2015/02/28
Cindy Smith 1975/03/20 2015/02/28
现在这可能是5000人,而我刚给了2行来向你展示我的意思。
CREATE table employees (Name NVARCHAR(30),Surname NVARCHAR (30),DOB DATETIME,Timestamp DATETIME)
要解决日期不显示小时,分钟,秒的问题,我正在使用
CONVERT(CHAR(10),Timestamp,113)
您是否使用While循环或其他内容来创建一个列,该列显示每行的相同时间戳?
感谢。
答案 0 :(得分:2)
我认为最简单的方法是从日期中减去当月的日期:
select t.*, dateadd(day, -day(timestamp), timestamp)
from table t;
编辑:在`更新:
update t
set timestamp = dateadd(day, -day(dob), dob)
此外,您不应该使用转换来删除日期的时间组件,您只需要date
。如果dob
有时间成分(似乎不太可能):
update t
set timestamp = cast(dateadd(day, -day(dob), dob) as date)
答案 1 :(得分:1)
假设该表的Timestamp
列为NULL
的记录。然后使用以下更新查询将更新上个月的最后一天的所有记录。
UPDATE employees
SET [Timestamp] = CAST(DATEADD(DAY,-1,DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0))AS DATE)
WHERE [Timestamp] IS NULL
内部DATEADD
将找到当月的第一天,外部DATEADD
会将日期减一,从而导致上个月的最后一个日期。
当GETDATE()
中的月份为April
时,NULL
值的记录将使用31-Mar-2015
进行更新。当GETDATE()
变为May
时,具有NULL
值的记录将使用30-Apr-2015
更新,即,它不会更新已具有值或已更新的记录。