2012-12-11 107 views
0

嗨,我有一個表在sql服務器,我已經增加了一個星期的一天。我有一個屬性是一個日期,我想更新所有的表更新位取決於這個日期的dayofWeek。我讀過一些關於t-sql(datepart)的東西,但我不知道我該怎麼做,有人可以幫我一點嗎?更新與日期部分表

這裏是我的表

http://i.imgbox.com/adpsLL0D.jpg

例如截圖,在首創三個記錄(2012年11月4日,最後一個月,週日),我想更新更新「prt_Dom」來1.

謝謝。

回答

1

我不完全確定你要做什麼,但也許這樣?

set language spanish 
go 

update dbo.MyTable 
set 
    prt_Lun = case when datename(dw, prt_fecha) = 'Lunes' then 0x1 else 0x0 end, 
    prt_Mar = case when datename(dw, prt_fecha) = 'Martes' then 0x1 else 0x0 end, 
    prt_Mie = case when datename(dw, prt_fecha) = 'Miércoles' then 0x1 else 0x0 end, 
    prt_Jue = case when datename(dw, prt_fecha) = 'Jueves' then 0x1 else 0x0 end, 
    prt_Vie = case when datename(dw, prt_fecha) = 'Viernes' then 0x1 else 0x0 end, 
    prt_Sab = case when datename(dw, prt_fecha) = 'Sábado' then 0x1 else 0x0 end, 
    prt_Dom = case when datename(dw, prt_fecha) = 'Domingo' then 0x1 else 0x0 end 
where 
    ... 

如果你的邏輯真的是這個簡單的,那麼你並不需要在所有的prt_%列,因爲你可以從prt_fecha需求始終得到位值。但是我猜測你在這裏設置了默認值,你可以稍後重寫,在這種情況下,表格會有意義。

而在使用日期時要小心文化特定的設置,如SET DATEFIRSTSET LANGUAGE

2
SET DATEFIRST 1 
UPDATE [tableName] SET [prt_Mar] = 1 WHERE DATEPART(dw, [prt_fecha]) = 2 

週三,你想

UPDATE [tableName] SET [column] = 1 WHERE DATEPART(dw, [prt_fecha]) = 3 

SET DATEFIRST是比較重要的,因爲不同的文化有不同數量的「一週的第一天」。如果需要定期執行某些工作日,則有完全確定性的方法來提取工作日。