Sql 将字符串值转换为天数

Sql 将字符串值转换为天数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在一列中有数据,其中包含4w4d、1w0d、2w5d、0w6d等值 我如何使用这些数据来计算外出天数 Create Table #temp ( Data char(4), ExpectedResult int ) insert into #temp ( Data, ExpectedResult ) select '4w4d','32' union all select '1w0d','7' union all select '2w5d','19' union all

我在一列中有数据,其中包含4w4d、1w0d、2w5d、0w6d等值

我如何使用这些数据来计算外出天数

Create Table #temp
(
   Data char(4),
   ExpectedResult int
)
insert into #temp
(
    Data,
    ExpectedResult
)
select '4w4d','32'
union all
select '1w0d','7'
union all
select '2w5d','19'
union all
select '0w6d','6'
union all
select '0w5d','5'
union all
select '0w1d','1'
union all
select '0w3d','3'
union all
select '1w6d','13'

您需要解析出周组件和日组件,然后转换为天数。以下是执行此操作的一种方法:

-- Find the weeks, multiple by 7
convert(int, substring([Data], 1, charindex('w',[Data])-1))*7
-- Find the days and add on
+ convert(int, substring([Data], charindex('w',[Data])+1, charindex('d',[Data])-charindex('w',[Data])-1))

您可以使用字符串操作分析字符串:

select convert(int, left(data, 1)) * 7 + convert(int, substring(data, 3, 1))

是对样本数据的篡改。

这是假设一周或一天只有一位数。@DaleBurrell。列被声明为
char(4)
,因此这似乎是一个非常合理的假设。没有既有
'w'
又有
'd'
的例子。你能有超过9周的时间吗?