我继承了另一个陈旧而低效的系统,这个系统使用5位数的项目编号,有时使用1,2或3个字母的后缀作为唯一标识符。
以下是此字段中有效项目编号的所有示例。总共使用了20多种不同的后缀。
Item_Num
00001ABC
002ABC
3214
87522ATT
22P
04828P
00421
这使得该领域难以使用,但它是无法改变的东西。它是一个企业级系统,有太多实体使用该领域。对于我正在撰写的查询,我需要将Item_Num
的两个部分分成我所称的Raw_Num
和Suffix
。但是由于格式不一致而使这变得困难; VAL()
不会抓住"浮动" 0s
和LEFT()
必须抓取2到5个字符。由于这些限制,我开发了以下代码
SELECT
Q2.Item_Num,
SWITCH
(
VAL(LEFT(("1" + Q2.Item_Num)),1)=1 , LEFT(VAL(Q2.Item_Number),5),
VAL(LEFT(("1" + Q2.Item_Num)),2)=10 , "0" + LEFT(VAL(Q2.Item_Number),4),
VAL(LEFT(("1" + Q2.Item_Num)),3)=100 , "00" + LEFT(VAL(Q2.Item_Number),3),
VAL(LEFT(("1" + Q2.Item_Num)),4)=1000 , "000" + LEFT(VAL(Q2.Item_Number),2),
VAL(LEFT(("1" + Q2.Item_Num)),5)=10000, "0000" + LEFT(VAL(Q2.Item_Number),1)
)
AS Raw_Numb
FROM
(
[[SUBQUERY]]
)
AS Q2
试图获得
的结果Item_Num Raw_Num
00001ABC 00001
002ABC 002
3214 3214
87522ATT 87522
22P 22
04828P 04828
00421 00421
然而,这会导致错误The Microsoft Office Access database engine could not find the object ''
。我搜索解决方案已经把我带到了this related question,这让我相信我试图引用一个无名对象。当我知道我可以运行
SELECT
Q2.Item_Num
FROM
(
[[SUBQUERY]]
)
AS Q2
获得
的输出Item_Num
00001ABC
002ABC
3214
87522ATT
22P
04828P
00421
这让我有三个相互关联的问题:
这只是执行不当SWITCH
声明的结果吗?
这是因为我以不能使用SWITCH
语句的方式使用Q2.Item_Num
语句吗?
如果我仅在语句中引用''
,我该如何搜索对象typedef struct{
float x;
float y;
float z;
} Point;
Point ***Qw;
Qw = malloc(num_bezier * sizeof(Point **));
for(i=0; i<num_bezier; i++){
Qw[i] = malloc((m+1) * sizeof(Point *));
for(j=0; j<=m;j++)
Qw[i][j] = malloc((p+1) * sizeof(Point));
}
?
这个Stack有点偏离主题: 有没有更好的方法去做我想做的事情?