找回密码
 加入
搜索
查看: 3183|回复: 9

[AU3基础] [已解决]SQL 用 正则 求助....或者 AU3 正则 我在想办法转换..求助高手

  [复制链接]
发表于 2013-10-30 00:22:40 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2013-10-30 13:03 编辑

SQL 資料表 有個欄位值  有一長串的字串 代表 一個月31天的班別
譬如:

,B001,,,B006,B001,C1,,    .......等等      ,與, 之間就會出現的字串是班別的編號  編號長度不一定......

第一個 以,開頭 表示 當月1號 不用上班, 要上班日 就會有班別編號......

求 用正則  轉換為.....

,1,,,1,1,1,,  將字串轉為 數字1 其他的 , 照舊......

或者 能算出 有幾組字串嗎??  用來計算 應出勤天數

P.S 最好能在 SQL 完成@@

如果真的不行....看看能不能 給個 AU3的正則 利用 AU3 來算應該出勤的天數
发表于 2013-10-30 01:15:29 | 显示全部楼层
不知道是不是这个效果:
Dim $NewString
Dim $String = ',B001,,,B006,B001,C1,,'
Dim $Array = StringSplit($String, ',')
If Not @error Then
        For $i = 1 To $Array[0]
                If $Array[$i] Then $Array[$i] = 1
                If $i < $Array[0] Then $NewString &= $Array[$i] & ","
        Next
        ConsoleWrite($NewString)
EndIf
 楼主| 发表于 2013-10-30 02:02:12 | 显示全部楼层
回复 2# haijie1223

這個方法 我理解  我主要需要 計算應出勤天數.... 本來的想法是 把字串都換成 ,1,1,,,1 等
利用正則直接替換  這樣我只要 取代掉 逗號  就會只剩下一連串的 1111111 計算一下長度 就等於 出勤天數了.....

感謝回覆^^
发表于 2013-10-30 06:54:33 | 显示全部楼层
[^,]+和@extend吧
发表于 2013-10-30 07:06:54 | 显示全部楼层
回复 3# kk_lee69


    计算一下1的个数的不就是出勤天数了~
发表于 2013-10-30 11:21:19 | 显示全部楼层
是这意思?
Local $Str = ',B001,,,B006,B001,C1,,'
Local $sRE = StringRegExpReplace($str, '[^,\s]+', '1')
MsgBox(0, $Str, $sRE & @LF & @Extended & '个')

评分

参与人数 1金钱 +30 收起 理由
haijie1223 + 30 学习~

查看全部评分

 楼主| 发表于 2013-10-30 12:59:10 | 显示全部楼层
回复 6# afan


    是這個意思  感謝回復  解決了  也順便 把 SQL 下的解決方法貼出來
 楼主| 发表于 2013-10-30 12:59:32 | 显示全部楼层
回复 4# kevinch


感謝回復  解決了  也順便 把 SQL 下的解決方法貼出來
 楼主| 发表于 2013-10-30 13:01:23 | 显示全部楼层
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
然後 後


SELECT  dbo.regexReplace(',B,B,,,B001,d4,55', '[^,]+' , '1' ,  1,0)   這樣就可以得到所要的結果了
发表于 2013-10-30 13:06:04 | 显示全部楼层
数据采集,正则不错!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 09:49 , Processed in 0.076675 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表