gpt4 book ai didi

sql-server-2012 - 在 MDX 中将 "YYYYMMDD"格式字符串转换为日期?

转载 作者:行者123 更新时间:2023-12-04 06:55:41 26 4
gpt4 key购买 nike

我在 MDX 中的“YYYYMMDD”格式字符串上应用日期相关函数时遇到一些问题。例如,如果我在下面有这个查询:

with 
member foo as WEEKDay("2013-03-21")
select
foo on 0
from
[Some Cube]
它将在 SSMS 中为 foo 正确输出“5”。但是,如果我将第二行更改为:
   member foo as WEEKDay("20130321")
不幸的是,它会抛出“类型不匹配”错误。
所以我想要做的是将字符串转换为某种可识别的日期格式,然后在其上应用函数。任何关于最简单方法的想法,例如使用现有功能?
请注意 字符串实际上是从运行 MDX 的任何多维数据集中的成员输入的。所以字符串格式可以被识别,例如“YYYY-MM-DD”。所以硬编码的字符串转换算法可能不行。

最佳答案

话题太老了,但也许这可能对某人有所帮助。技术非常粗暴,但可扩展。

with 
member foo_false as WeekDay("20130321")
member foo_true as WeekDay("2013-03-21")
member foo_brute as
case when IsError(WeekDay("20130321"))=False then WeekDay("20130321") else
case
/* YYYYMMDD */
when
IsError(WeekDay("20130321"))=True AND IsNumeric("20130321")=True
and IsError(WeekDay(Left("20130321",4)+'-'+Right(Left("20130321",6),2)+'-'+Right("20130321",2)))=False
then WeekDay(Left("20130321",4)+'-'+Right(Left("20130321",6),2)+'-'+Right("20130321",2))

/* DDMMYYYY */
when
IsError(WeekDay("20130321"))=True AND IsNumeric("20130321")=True
and IsError(WeekDay(Right("20130321",4)+'-'+Right(Left("20130321",4),2)+'-'+Left("20130321",2)))=False
then WeekDay(Right("20130321",4)+'-'+Right(Left("20130321",4),2)+'-'+Left("20130321",2))

/* MMDDYYYY */
when
IsError(WeekDay("20130321"))=True AND IsNumeric("20130321")=True
and IsError(WeekDay(Right("20130321",4)+'-'+Left("20130321",2)+'-'+Right(Left("20130321",4),2)))=False
then WeekDay(Right("20130321",4)+'-'+Left("20130321",2)+'-'+Right(Left("20130321",4),2))

/* Unsupported Message */
else "Unsupported Format" end
end
select
{foo_false,foo_true,foo_brute} on 0
from
[DATA Cube]

在“Unsupported”之前添加可支持的格式,使用任何输入字符串代替 "20130321" .

但最简单的方法是如果可能的话,在插入到 MDX 之前使用另一个层(例如 SQL 函数 CONVERT)。

关于sql-server-2012 - 在 MDX 中将 "YYYYMMDD"格式字符串转换为日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15537618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com