Sql server 如何将年和周列与周日期列联接

Sql server 如何将年和周列与周日期列联接,sql-server,date,join,left-join,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..| |..20

我在单独的表中有这两列:

表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|
我的问题是,如何在不硬编码任何join语句的情况下,最有效地将表2中的“每周”列与表1中的“年-周”列联接起来

 where [year week] = 'yyyy ww' 
等等

起初我想写一份联合声明,但意识到这两张表中没有共同的列

我必须保持两个表的格式相同。我在想,有没有办法将“年-周”列中的周提取到一个单独的列中,然后以这种方式加入


我不知道从哪里开始。

尝试使用字符串函数从表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做了一个select distinct语句,然后通过excel连接表2


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

虽然我理解这是一个平衡行为,但我不认为忽略这一点会更清楚。请参见以非日期数据类型存储日期通常会导致此类问题。一种方法是创建映射表。这将把一种格式转换成另一种格式。您可以将两个表都连接到新表,从而彼此连接。MySql或SQL Server?两者都是两个不同的数据库,即SQL Server。