【发布时间】:2020-03-05 23:38:51
【问题描述】:
尝试在 MS Access 中尝试以下操作。
将一个字段中的数据转换为另一个字段中以 01 开头的 18 位数字。
还有一些条件需要满足:
- 第一个破折号应该变成双零
- 应该删除第二个破折号
- 第三个和第四个破折号应该是一个零
- 小数点也必须用零替换
我的查询工作正常,直到小数点是数据中的第 15 个字符。
这里是查询:
SELECT MasterVacant.ParcelIdNumber,
"01" + Mid([ParcelIdNumber],1,2) + "00" + Mid([ParcelIdNumber],4,2) + Mid([ParcelIdNumber],7,1)
+ IIf(Mid([ParcelIDNumber],11,1) = "", "0"+Mid([ParcelIDNumber],9,2), Mid([ParcelIDNumber],9,3))
+ IIf(Mid([ParcelIDNumber],14,1) = ".", "0"+Mid([ParcelIDNumber],12,2), Mid([ParcelIDNumber],12,3))
+ Mid([ParcelIDNumber],15,3) AS ParcelNumber
FROM MasterVacant;
这是一个开始和结束的例子......
'12-06-1-00-50.000-RR' should become '011200061000050000'
'12-06-3-07-09.000-RR' should become '011200063007009000'
'13-35-1-01-129.000-RR' should become '011300035100112900'
但是,我得到的不是“0113000351001129000”,而是“013000351001129.00”。
问题是当小数点是第 15 个字符时,我如何删除小数点,就像在第三组示例中一样?
我将数据作为单列接收。其中一些在下面....
1. 13-35-1-07-29.000-RR
2. 13-35-1-01-112.000-RR (Removing the decimal when the data is like this is the issue)
3. 13-35-4-01-01.000-RR
4. 13-35-4-02-04.000-RR
5. 13-35-1-13-17.000-RR
上述数据的输出应该是
1. 011300351007029000
2. 011300351001112000
3. 011300354001001000
4. 011300354002004000
5. 011300351013017000
【问题讨论】:
-
将点替换为零并从那里取走。
-
有什么方法可以实现 and Or Mid([ParcelIdNumber],15,1)= ".","0".如果小数点是值中的第 15 个字符,那会给我一个 0 吗?
-
但是您的第三个示例有 19 个字符。而且您没有列出最后五个示例的预期结果,并且这些示例附加了逗号。请非常具体,并在发布之前仔细检查您的示例。
-
忽略我提供的数据中的逗号
-
好的。请查看我的更新答案。
标签: ms-access decimal iif-function