如何使用周日期列

时间:2017-07-25 09:41:40

标签: sql-server date join left-join

我在不同的表上有这两列:

表1中的一列,显示年份和星期。有重复项,因为表格右侧的这一列中每行都有不同的数据集,但我把它留下来以使问题更清楚:

|.Year Week.|
|..2015 52..|
|..2015 52..|
|..2015 53..|
|..2016 01..|
|....etc....|
|....etc....|
|..2017 23..|
|..2017 23..|
|..2017 23..|
|..2017 24..|
|..2017 25..|
|..2017 25..|

然后是表2中的这一列,它按时间顺序显示了一周的长度,因为你以1周为增量逐年减少。这更像是一个日历表/数据库:

|----Week-----|
|080115_140115|
|150115_210115|
|220115_280115|
|.....etc.....|
|.....etc.....|
|090217_150217|
|160217_220217|
|230217_010317|

我的问题是如何最有效地将表2中的每周列与表1中的年周列连接,而不对任何连接语句进行硬编码

 where [year week] = 'yyyy ww' 

等等?

我最初在想一个联合声明,但意识到我在两个表中都没有共同的列。

我必须保持两个表的格式相同。正在思考,有没有从|年周提取周数列成一个单独的列,然后以这种方式加入它?

我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

尝试使用字符串函数从表1中提取年份,星期,并在表格中加入2年和一周。从表2中提取年份和周数,如下所示。

年是

select  DATEPART( year,CONVERT(DATE,SUBSTRING(SUBSTRING('080115_140115',0,7),5,2) + SUBSTRING(SUBSTRING('080115_140115',0,7),3,2) +SUBSTRING(SUBSTRING('080115_140115',0,7),0,3),102))

周是

select  DATEPART( wk,CONVERT(DATE,SUBSTRING(SUBSTRING('080115_140115',0,7),5,2) + SUBSTRING(SUBSTRING('080115_140115',0,7),3,2) +SUBSTRING(SUBSTRING('080115_140115',0,7),0,3),102))

答案 1 :(得分:0)

好的,所以这可能不是最有效的答案,但我为表1做了一个select distinct语句,然后通过excel加入表2。

由于这是一个静态/历史表(我只需要做一次)我再次将excel中的模板/数据导入sql,并使用year year作为连接两个表的公共列。