我正在嘗試創建一個 SSIS 派生列,它將 HH:MM:SS 從平面檔案轉換為資料庫中的幾秒鐘。
我遇到但似乎沒有找到如何上網的問題是 HH 超過 24 歲。
例如,其中一個 csv 檔案具有 178:29:00。
我 (DT_NUMERIC,10,2)(((DT_I4)SUBSTRING([SPEED OF ANSWER],1,2) * 3600) ((DT_I4)SUBSTRING([SPEED OF ANSWER],4,2) * 60) ((DT_NUMERIC,4,2)RIGHT([SPEED OF ANSWER],2)))在 24 小時以下時使用。
但是如果超過 24 則這不起作用。
uj5u.com熱心網友回復:
一種方法是將 varchar 拆分為不同的值,然后將它們相加。
您在代碼中做錯的是您沒有考慮小時部分的位數。
這是一個關于如何做到這一點的示例,該示例是在 SQL 中,因為我對 ssis 了解不多。
希望它可以幫助你
declare @s varchar(20) = '178:29:00'
select convert(int, left(@s, charindex(':', @s) - 1)) * 3600
convert(int, substring(@s, charindex(':', @s) 1, 2)) * 60
convert(int, right(@s, 2))
這是不檢查是否存在無效值,您仍然必須這樣做。
我還假設minute和second部分總是 2 位數長
uj5u.com熱心網友回復:
這是一個腳本組件。
string time = row.YourTimeRowAsString;
var t = time.Split(':');
int secs = 0;
switch(t.length)
{
case 0:
break;
case 1:
secs = int.Parse(t[0]);
break;
case 2:
secs = 60* int.Parse(t[0]) int.Parse(t[1]);
break;
case 3:
secs = 60*60*int.Parse(t[0]) 60*int.Parse(t[1]) int.Parse(t[2]);
break;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389558.html
下一篇:大量連接行的日期比較緩慢
