MS-SQL取week不正确(第几周) |
答題得分者是:老大仔
|
leonli80
一般會員 ![]() ![]() 發表:29 回覆:27 積分:11 註冊:2006-08-01 發送簡訊給我 |
|
老大仔
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
SQL的說為以下:
week (wk, ww) 日期部份反映了對 SET DATEFIRST 所做的變更。任何年份的 1 月 1 日定義了 week 日期部份的開始數字,例如:DATEPART(wk, 'Jan 1, xxxx') = 1,其中 xxxx 是任何年份。 "感覺"上...SQL資料庫是以今年的一月一日當天的當週為第一個星期 照這樣算下來 這星期就會是第13週了 請試試以下: [code sql] SET DATEFIRST 5 select datepart(week, getdate()) [/code] 以上僅供參考~ ===================引 用 leonli80 文 章=================== select datepart(week, getdate()) 返回为13 (错误),而在delphi的WeekOfTheYear(now) 却是返回12 (正确)。如何能解决这种不一致的问题?
編輯記錄
老大仔 重新編輯於 2010-03-24 17:14:36, 註解 無‧
|
leonli80
一般會員 ![]() ![]() 發表:29 回覆:27 積分:11 註冊:2006-08-01 發送簡訊給我 |
|
eaglewolf
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
依據ISO 8601 一年的第一週至少有四天
也就是說 以星期日為一週的第一天為例: 1/1 若在星期四至六之間 將 datepart結果 -1 [code sql] declare @date as datetime declare @year as int declare @firstdate as varchar(10) set @date = getdate() set @year = year(@date) set @firstdate = cast(@year as varchar(4)) '/1/1' if ( datepart(weekday, @firstdate) >= 5 ) or (datepart(weekday, @firstdate) <= 7 ) select datepart(week, @date) - 1 else select datepart(week, @date) [/code] ===================引 用 leonli80 文 章=================== SET DATEFIRST 是用来设置每周从星期几开始的,所以无法达到效果。 拿2010-01-01来说,DELPHI是按国标把1,2号归在上年的最后一周的。而MS_SQL里面是从1-1号算第1周。
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
熾冰
一般會員 ![]() ![]() 發表:29 回覆:21 積分:10 註冊:2004-01-12 發送簡訊給我 |
===================引 用 eaglewolf 文 章=================== 依據ISO8601 一年的第一週至少有四天 也就是說 以星期日為一週的第一天為例: 1/1 若在星期四至六之間 將 datepart結果 -1 [code sql] declare @date as datetime declare @year as int declare @firstdate as varchar(10) set @date = getdate() set @year = year(@date) set @firstdate = cast(@year as varchar(4)) '/1/1' if ( datepart(weekday, @firstdate) >= 5 ) or (datepart(weekday, @firstdate) <= 7 ) select datepart(week, @date) - 1 else select datepart(week, @date) [/code] 由於 eaglewolf 的語法有瑕疵 我試了2012/1/1 由於這個日期落在星期日, 所以應該取的第一周,但是結果還是第零周 我做了小修正 只是將 or 改用 and [code sql] declare @date as datetime declare @year as int declare @firstdate as varchar(10) set @date = getdate() set @year = year(@date) set @firstdate = cast(@year as varchar(4)) '/1/1' if ( datepart(weekday, @firstdate) >= 5 ) and (datepart(weekday, @firstdate) <= 7 ) select datepart(week, @date) - 1 else select datepart(week, @date) [/code] 最好的測試日期是 2014/1/1 是星期三 為第一周 2015/1/1 是星期三 為第零周
編輯記錄
熾冰 重新編輯於 2011-03-02 20:45:37, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |