vba 函数isDate
可用于检查传递的日期是否格式正确。如果不是,则首先使用dateserial
和格式化它mid
并使用它们。
with
member foo as "20130321"
member bar as
iif(vba!isdate(foo) = TRUE,
WEEKDay(foo), //--if the date is already well formatted, it can be used
WEEKday(vba!dateserial(vba!mid(foo, 0, 4), vba!mid(foo, 5, 2), vba!right(foo, 2))))
select
bar on 0
from
[some cube]
编辑
上面的代码可以修改以适应其他检查,例如MMDDYYYY
or DDMMYYYY
,但在很多情况下,引擎不可能直观地知道传递的值是否在YYYYMMDDDD
orDDMMYYYY
或MMDDYYYY
中。以字符串为例1111111
这可以很容易地采用任何日期格式,因为它是一个有效的日期,无论你如何打破它。
我建议您有另一个成员也可以存储日期格式。这样看这个成员,就可以解析字符串。
例如
with
member foo as
// "20130321" //YYYYMMDD
// "03212013"//MMDDYYYY
"21032013"//DDMMYYYY
MEMBER dateformat as "ddmmyyyy"
member bar as
iif(vba!isdate(foo) = TRUE,
WEEKDay(foo),
IIF(dateformat = "yyyymmdd", //YYYYMMDD
WEEKday(vba!dateserial(vba!mid(foo, 0, 4), vba!mid(foo, 5, 2), vba!right(foo, 2))),
IIF(dateformat = "mmddyyyy", //MMDDYYYY
WEEKday(vba!dateserial(right(foo, 4), vba!mid(foo, 0, 2), vba!mid(foo, 3, 2))),
IIF(dateformat = "ddmmyyyy", //DDMMYYYY
WEEKday(vba!dateserial(right(foo, 4), vba!mid(foo, 3, 2), vba!mid(foo, 0, 2))),
null
)
)
)
)
select
bar on 0
from
[aw cube]