0

嗨,我在 sql server 中有一张表,我为每个工作日添加了一位。我有一个日期属性,我想根据该日期的 dayofWeek 更新所有表来更新位。我已经阅读了一些关于 t-sql (datepart) 的内容,但我不知道该怎么做,有人可以帮帮我吗?

这是我的桌子的截图

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

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

谢谢。

4

2 回答 2

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相对重要,因为不同的文化有不同的“一周的第一天”数字。如果您需要定期做某事,那么有完全确定的方法可以提取工作日。

于 2012-12-11T16:16:14.680 回答
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

于 2012-12-11T16:20:58.600 回答