【发布时间】:2011-11-09 01:08:55
【问题描述】:
对于 TableA 中的每一行,我都有一个日期和一个星期数字段。日期字段已经填充,我希望有一种方法可以自动填写周数字段,而不必手动填写。
日期示例如下: 20111007
希望你能帮忙,干杯:)
【问题讨论】:
-
@Jandrejc 这个问题的答案不是很好。我找到了一种方法,只需 2 行即可编写逻辑。
标签: sql-server tsql date formats
对于 TableA 中的每一行,我都有一个日期和一个星期数字段。日期字段已经填充,我希望有一种方法可以自动填写周数字段,而不必手动填写。
日期示例如下: 20111007
希望你能帮忙,干杯:)
【问题讨论】:
标签: sql-server tsql date formats
使用此语法,您可以检索日期的星期。
SELECT datepart(week, '20111007'), datepart(iso_week, '20111007')
iso_week 仅适用于 sqlserver 2008。
您确实应该考虑将周字段设置为计算列。它会让你的生活变得更轻松(我会使用这个解决方案)。
这将是您的语法:
alter table <yourtable> add week1 as datepart(week, <yourdatecolumn>)
如果您因某种原因被阻止更改数据库,您可以使用这个:
UPDATE <table>
SET <weekcolumn> = datepart(week, <yourdate>)
WHERE week is null and <yourdate> is not null
问题是,如果日期更改,周仍将保持不变,除非使用触发器更新周,否则在使用此脚本之前,周将不可用。
您还可以创建一个视图来显示所有列并将星期添加为计算字段,这也是一个有效的解决方案。尽管列出列而不是使用 wildchar(*) 是一种好习惯,但我使用它是因为我不知道您的列。
CREATE VIEW v_yourview as
SELECT *, datepart(week, <yourdate>) week1 FROM <table>
【讨论】: