使用Datepart更新表格

时间:2012-12-11 15:50:55

标签: sql-server datepart

嗨我在sql server中有一个表,我每周都添加了一个表。我有一个属性是一个日期,我想更新所有表更新位,取决于这个日期的dayofWeek。我已经读过关于t-sql(datepart)的一些内容,但我不知道我该怎么办,有人可以帮我一点吗?

这是我的表格的截图

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

例如,在第一,三个记录(2012-11-04,上个月,星期日)我想更新“prt_Dom”更新为1.

感谢。

2 个答案:

答案 0 :(得分: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相对重要,因为不同的文化有不同的“一周的第一天”数字。如果你需要经常做一些事情,有完全确定的方法来提取工作日。

答案 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