以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  简单问题(求月份)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=1011)

--  作者:表之狂
--  发布时间:2008/10/29 16:25:00
--  简单问题(求月份)
表中有日期列,月份列,想在月份列自动求日期列中的月份,要求每年的12月26算下一年的一月,每月26日开始,25日结束,谢谢
--  作者:狐狸爸爸
--  发布时间:2008/10/29 16:38:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目22.table


--  作者:don
--  发布时间:2008/10/29 17:13:00
--  
表達式也可以,不過複雜點,下面是"D/M/YYYY"格式的:

IIF(Convert(SubString(Convert([日期],\'System.String\'),IIF(SubString(Convert([日期],\'System.String\'),1,2) Like \'*/*\',3,4),IIF(SubString(Convert([日期],\'System.String\'),IIF(SubString(Convert([日期],\'System.String\'),1,2) Like \'*/*\',3,4),2) Like \'*/*\',1,2)),\'System.Byte\')+Convert(IIF(SubString(Convert([日期],\'System.String\'),1,IIF(SubString(Convert([日期],\'System.String\'),1,2) Like \'*/*\',1,2)) > 25,1,0),\'System.Byte\') > 12,1,Convert(SubString(Convert([日期],\'System.String\'),IIF(SubString(Convert([日期],\'System.String\'),1,2) Like \'*/*\',3,4),IIF(SubString(Convert([日期],\'System.String\'),IIF(SubString(Convert([日期],\'System.String\'),1,2) Like \'*/*\',3,4),2) Like \'*/*\',1,2)),\'System.Byte\')+Convert(IIF(SubString(Convert([日期],\'System.String\'),1,IIF(SubString(Convert([日期],\'System.String\'),1,2) Like  \'*/*\',1,2)) > 25,1,0),\'System.Byte\'))

--  作者:狐狸爸爸
--  发布时间:2008/10/29 17:19:00
--  

哈哈,还说不难,我看得头晕了。
你这个是香港日期吧,不适合大陆日期。


--  作者:don
--  发布时间:2008/10/29 17:34:00
--  
以下是引用狐狸爸爸在2008-10-29 17:19:00的发言:

你这个是香港日期吧,不适合大陆日期。

适合大陆日期的,請測試:

IIF(Convert(IIF(SUBSTRING(Convert([日期],\'System.String\'),7,1) = \'-\',SUBSTRING(Convert([日期],\'System.String\'),6,1),SUBSTRING(Convert([日期],\'System.String\'),6,2)),\'System.Byte\')+IIF(Convert(SubString(Convert([日期],\'System.String\'),IIF(SubString(Convert([日期],\'System.String\'),8,2) Like \'*-*\',9,8),2),\'System.Byte\') > 25,1,0)>12,1,Convert(IIF(SUBSTRING(Convert([日期],\'System.String\'),7,1) = \'-\',SUBSTRING(Convert([日期],\'System.String\'),6,1),SUBSTRING(Convert([日期],\'System.String\'),6,2)),\'System.Byte\')+IIF(Convert(SubString(Convert([日期],\'System.String\'),IIF(SubString(Convert([日期],\'System.String\'),8,2) Like \'*-*\',9,8),2),\'System.Byte\') > 25,1,0))


--  作者:don
--  发布时间:2008/10/29 17:49:00
--  
把下面表達式的"[T]"替換為"Convert([日期],\'System.String\')"就是5樓的:

IIF(Convert(IIF(SUBSTRING([T],7,1) = \'-\',   SUBSTRING([T],6,1),SUBSTRING([T],6,2)),\'System.Byte\')+IIF(Convert(SubString([T],IIF(SubString([T],8,2)  Like  \'*-*\',9,8),2),\'System.Byte\') > 25,1,0)>12,1,Convert(IIF(SUBSTRING([T],7,1) = \'-\',   SUBSTRING([T],6,1),SUBSTRING([T],6,2)),\'System.Byte\')+IIF(Convert(SubString([T],IIF(SubString([T],8,2)  Like  \'*-*\',9,8),2),\'System.Byte\') > 25,1,0))


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table

[此贴子已经被作者于2008-10-29 17:55:14编辑过]

--  作者:表之狂
--  发布时间:2008/10/29 18:22:00
--  
老六,以上的解决方法都复杂,你还是尽快解决到像易表那样,不太复杂的功能用表达式解决不是更好吗。
--  作者:狐狸爸爸
--  发布时间:2008/10/29 19:12:00
--  
以下是引用表之狂在2008-10-29 18:22:00的发言:
老六,以上的解决方法都复杂,你还是尽快解决到像易表那样,不太复杂的功能用表达式解决不是更好吗。


下面的代码,难道不比易表清晰易懂多了吗?

If e.DataCol.Name = "日期" Then
    If e.NewValue Is Nothing Then
        e.Datarow("月份") = Nothing 
    Else
        Dim d As Date = e.NewValue
        Dim m As Integer = d.Month
        If d.Day > 25 Then
            m = m + 1
        End If
        If m = 13 Then
           m = 1   
        End If
        e.DataRow("月份") = m
    End If
End If



 

[此贴子已经被作者于2008-10-29 19:12:39编辑过]

--  作者:don
--  发布时间:2008/10/29 20:56:00
--  
以下是引用狐狸爸爸在2008-10-29 19:12:00的发言:


下面的代码,难道不比易表清晰易懂多了吗?

If e.DataCol.Name = "日期" Then
    If e.NewValue Is Nothing Then
        e.Datarow("月份") = Nothing 
    Else
        Dim d As Date = e.NewValue
        Dim m As Integer = d.Month
        If d.Day > 25 Then
            m = m + 1
        End If
        If m = 13 Then
           m = 1   
        End If
        e.DataRow("月份") = m
    End If
End If

嘻嘻,还是易表简单点:
Month(EDate([日期],Number(Day([日期])>25)))


--  作者:狐狸爸爸
--  发布时间:2008/10/29 21:22:00
--  
呵呵,那我以简单点:

If e.DataCol.Name = "日期" Then
    Dim d As Date = e.NewValue
    e.DataRow("月份") = iif(e.NewValue Is Nothing,Nothing, iif(d.day<= 25,d.month,(d.month + 1) mod 12))
End If

不过我还是喜欢之前那种方式,虽然长一点,但是可读性强多了。
[此贴子已经被作者于2008-10-29 21:25:33编辑过]