以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何用SQL求主数字?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40976)

--  作者:don
--  发布时间:2013/10/8 14:57:00
--  [求助]如何用SQL求主数字?
编号
OLY131-4
OLY-1201
OLY-1090-02
OLY-1140-03
OLY-1014-06
OLY-1203
OLY-1204
OLY-1207
OLY-1026-01
OLY-1208
OLY-1209
OLY-1210
OLY215
MW-1001
OLY-1131-03
OLY-1004-02
MW-1002
MW-1003
MW-1004
上面为编号列,编号有些不规范,现想通过SQL(内部表)求主数字:

没有"-"的编号,取数字部分,如OLY215,则取215

有1个"-"分隔符的,如OLY-1133,则取1133,如OLY235-2,则取235;
有2个"-"分隔符的,取中间数字,如OLY-1131-03,则取1131


[此贴子已经被作者于2013-10-8 15:02:22编辑过]

--  作者:Bin
--  发布时间:2013/10/8 15:06:00
--  
这个,使用代码做更加好吧.
--  作者:don
--  发布时间:2013/10/8 15:19:00
--  
以下是引用Bin在2013-10-8 15:06:00的发言:
这个,使用代码做更加好吧.
使用代码是应该更加好,只是我想得到这个主数字后,然后生成一个格式化数字,再用这个格式化数字作为关键字段通过SQL 的 INNER JOIN 得出我想要的数据,
如用代码,只怕只能用DeleteFor删除不合条件的数据了,效率可能低点


--  作者:Bin
--  发布时间:2013/10/8 15:21:00
--  
用SQL 那可是大工程.难度挺高得,工作量也大. 效率也不会高到哪里去.
--  作者:lsy
--  发布时间:2013/10/8 16:20:00
--  

这么复杂,用SQL,俺弄不好。

代码倒不算难:

 

If e.DataCol.Name = "第一列" Then
    If IsNumeric(e.DataRow(e.DataCol)) Then
        Return
    End If
    Dim s As String = e.DataRow(e.DataCol)
    If s.Split("-").Length > 1 Then
        If s.Split("-")(0).StartsWith("OLY") AndAlso s.Split("-")(0).Length > 3  Then
            s = s.Split("-")(0).SubString(3)
        ElseIf s.Split("-")(0).StartsWith("MW") AndAlso s.Split("-")(0).Length > 2 Then
            s = s.Split("-")(0).SubString(2)
        Else
            s = s.Split("-")(1)
        End If
    Else
        If s.StartsWith("OLY") Then
            s = s.SubString(3)
        ElseIf s.StartsWith("MW")
            s = s.SubString(2)
        End If
    End If
    e.DataRow(e.DataCol) = s
End If

[此贴子已经被作者于2013-10-8 16:35:46编辑过]

--  作者:don
--  发布时间:2013/10/8 16:44:00
--  
多謝兩位!