我正在尝试在以下代码中添加“天”。字符串沿
每次尝试一些我认为会起作用的东西时,它都会在其他地方出错。下面的代码有效。我只需要在其中添加“天数”即可。
SELECT *,
CASE WHEN CHARINDEX('hrs',REPLACE([Session Duration],' ',''),0) >0
THEN SUBSTRING(REPLACE([Session Duration],' ',''),0,CHARINDEX('hrs',REPLACE([Session Duration],' ',''),0))
ELSE 0 END AS Hrs,
CASE WHEN CHARINDEX('hrs',REPLACE([Session Duration],' ',''),0) >0 AND CHARINDEX('min',REPLACE([Session Duration],' ',''),0) >0
THEN SUBSTRING(REPLACE([Session Duration],' ',''),CHARINDEX('hrs',REPLACE([Session Duration],' ',''),0)+3,CHARINDEX('min',REPLACE([Session Duration],' ',''),0) - CHARINDEX('hrs',REPLACE([Session Duration],' ',''),0)-3)
WHEN CHARINDEX('min',REPLACE([Session Duration],' ',''),0) >0
THEN SUBSTRING(REPLACE([Session Duration],' ',''),0,CHARINDEX('min',REPLACE([Session Duration],' ',''),0))
ELSE 0 END AS mins,
CASE WHEN CHARINDEX('min',REPLACE([Session Duration],' ',''),0) >0 AND CHARINDEX('sec',REPLACE([Session Duration],' ',''),0) >0
THEN SUBSTRING(REPLACE([Session Duration],' ',''),CHARINDEX('min',REPLACE([Session Duration],' ',''),0)+3,CHARINDEX('sec',REPLACE([Session Duration],' ',''),0) - CHARINDEX('min',REPLACE([Session Duration],' ',''),0)-3)
WHEN CHARINDEX('sec',REPLACE([Session Duration],' ',''),0) >0
THEN SUBSTRING(REPLACE([Session Duration],' ',''),0,CHARINDEX('sec',REPLACE([Session Duration],' ',''),0))
ELSE 0 END AS secs
FROM table1
答案 0 :(得分:0)
下面的查询将返回Days
,如果days
字符串中没有Session Duration
,它将返回0。
SELECT ...,
...,
CASE WHEN CHARINDEX('days', REPLACE([Session Duration], ' ', ''), 0) > 0
THEN SUBSTRING(REPLACE([Session Duration], ' ', ''), 0, CHARINDEX('days', REPLACE([Session Duration], ' ', ''), 0))
ELSE 0 END AS [Days],
...
FROM Table1
答案 1 :(得分:0)
我不确定这是最好的答案,但是我这样做是这样的:
declare @table table (data nvarchar(30))
insert into @table
values
('1 sec'),
('4 min 1 sec'),
('4 hrs 3 min 1 sec'),
('23 hrs 3 min 4 sec'),
('1 days 3 hrs 4 min 15 sec'),
('1 days 23 hrs 59 min 59 sec'),
('5 days 3 hrs 1 min 0 sec'),
('532 days 3 hrs 1 min 0 sec')
select
data,
CONVERT(int,LTRIM(SUBSTRING(data, PATINDEX('%[ 0-9][0-9] sec', data),PATINDEX('% sec', data)-PATINDEX('%[ 0-9][0-9] sec', data)+1))) secs,
CONVERT(int,LTRIM(SUBSTRING(data, PATINDEX('%[ 0-9][0-9] min%', data),PATINDEX('% min%', data)-PATINDEX('%[ 0-9][0-9] min%', data)+1))) mins,
CONVERT(int,LTRIM(SUBSTRING(data, PATINDEX('%[ 0-9][0-9] hrs%', data),PATINDEX('% hrs%', data)-PATINDEX('%[ 0-9][0-9] hrs%', data)+1))) hrs,
CONVERT(int,SUBSTRING(data, 0,PATINDEX('% days%', data))) days
from
@table
输出:
不过,老实说,我的主要建议是不要像最初那样存储此信息,并在将值插入数据库表之前尝试将这些值拆分为单独的列。如果这样做的话,处理表将更快,并且将占用更少的磁盘空间,因为整数比字符串占用更少的空间。