3 回答

TA貢獻1779條經(jīng)驗 獲得超6個贊
關(guān)鍵是使用DATEADD和DATEDIFF以及適當(dāng)?shù)腟QL時間間隔枚舉。
declare @datetime datetime;
set @datetime = getdate();
select @datetime;
select dateadd(year,datediff(year,0,@datetime),0);
select dateadd(month,datediff(month,0,@datetime),0);
select dateadd(day,datediff(day,0,@datetime),0);
select dateadd(hour,datediff(hour,0,@datetime),0);
select dateadd(minute,datediff(minute,0,@datetime),0);
select dateadd(second,datediff(second,'2000-01-01',@datetime),'2000-01-01');
select dateadd(week,datediff(week,0,@datetime),-1); --Beginning of week is Sunday
select dateadd(week,datediff(week,0,@datetime),0); --Beginning of week is Monday
請注意,當(dāng)您按秒進行平鋪時,如果使用0,則通常會出現(xiàn)算術(shù)溢出。因此,請選擇一個保證低于您嘗試放置的日期時間的已知值。

TA貢獻1757條經(jīng)驗 獲得超7個贊
擴展Convert / Cast解決方案,在Microsoft SQL Server 2008中,您可以執(zhí)行以下操作:
cast(cast(getdate() as date) as datetime)
只需替換getdate()為日期時間的任何列。
此轉(zhuǎn)換不涉及任何字符串。
這對于即席查詢或更新是可以的,但對于密鑰連接或大量使用的處理,最好在處理中處理轉(zhuǎn)換或重新定義表以具有適當(dāng)?shù)拿荑€和數(shù)據(jù)。
在2005年,你可以使用凌亂的地板: cast(floor(cast(getdate() as float)) as datetime)
我不認(rèn)為這也使用字符串轉(zhuǎn)換,但我不能說比較實際效率與扶手椅估計。
- 3 回答
- 0 關(guān)注
- 700 瀏覽
添加回答
舉報