[已解决]SQL 用 正则 求助....或者 AU3 正则 我在想办法转换..求助高手
本帖最后由 kk_lee69 于 2013-10-30 13:03 编辑SQL 資料表 有個欄位值有一長串的字串 代表 一個月31天的班別
譬如:
,B001,,,B006,B001,C1,, .......等等 ,與, 之間就會出現的字串是班別的編號編號長度不一定......
第一個 以,開頭 表示 當月1號 不用上班, 要上班日 就會有班別編號......
求 用正則轉換為.....
,1,,,1,1,1,,將字串轉為 數字1 其他的 , 照舊......
或者 能算出 有幾組字串嗎??用來計算 應出勤天數
P.S 最好能在 SQL 完成@@
如果真的不行....看看能不能 給個 AU3的正則 利用 AU3 來算應該出勤的天數 不知道是不是这个效果:
Dim $NewString
Dim $String = ',B001,,,B006,B001,C1,,'
Dim $Array = StringSplit($String, ',')
If Not @error Then
For $i = 1 To $Array
If $Array[$i] Then $Array[$i] = 1
If $i < $Array Then $NewString &= $Array[$i] & ","
Next
ConsoleWrite($NewString)
EndIf
回复 2# haijie1223
這個方法 我理解我主要需要 計算應出勤天數.... 本來的想法是 把字串都換成 ,1,1,,,1 等
利用正則直接替換這樣我只要 取代掉 逗號就會只剩下一連串的 1111111 計算一下長度 就等於 出勤天數了.....
感謝回覆^^ [^,]+和@extend吧 回复 3# kk_lee69
计算一下1的个数的不就是出勤天数了~ 是这意思?Local $Str = ',B001,,,B006,B001,C1,,'
Local $sRE = StringRegExpReplace($str, '[^,\s]+', '1')
MsgBox(0, $Str, $sRE & @LF & @Extended & '个') 回复 6# afan
是這個意思感謝回復解決了也順便 把 SQL 下的解決方法貼出來 回复 4# kevinch
感謝回復解決了也順便 把 SQL 下的解決方法貼出來 SQL 下的解決方式為.....先建立一個自訂函數---建立 正則 替換 函數(用來替換字串裡面的東西)
Create function dbo.regexReplace
(
@source varchar(5000), --原字符串
@regexp varchar(1000), --正則表換式
@replace varchar(1000), --替換值
@globalReplace bit = 0, --是否是全局替換
@ignoreCase bit = 0 --是否忽略大小寫
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)
exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end
return @result
end
GO然後 後
SELECTdbo.regexReplace(',B,B,,,B001,d4,55', '[^,]+' , '1' ,1,0) 這樣就可以得到所要的結果了 数据采集,正则不错!
页:
[1]