这个Access的update语句怎么写呀?急!(50分)

  • 主题发起人 主题发起人 XLR2003
  • 开始时间 开始时间
X

XLR2003

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Access数据库,有一个表table1的字段dm,变化如下:
dm dm
0108 0107
0109 0108
0110 =====> 0109
0111 0110
0112 0111

即代码值都减1,但要求生成的结果还是两位一码,即"0108->0107,不能是017,0110->0109不能是019".请问Access的语句怎么写?我对access不熟!
 
update table1
set dm = right("0000" + cstr(cint(dm) - 1), 4)
 
dm是字符串吧,这样子:
update
set dm= "0" + cstr(cint(dm)-1)
主要思想就是两次类型转换。还有你前面有多少个“0”?自己看着处理吧。
 
我的dm是字符型的,两位一码,但位数不一定。

也可能是 010109->010108,010111->010110
 
很简单的说:
Update table1
Set dm = Left(dm, Len(dm) - 2) + Format(CInt(Right(dm, 2)) - 1, "00")
其中 Format 是将不足两位的整数前补“0”。
 
set dm = right("0000000000" + cstr(cint(dm) - 1), len(dm))
 
To jenhon:
不要误导人民群众,谢谢!
 
轻舞肥羊和vvyang都可以,vvyang的更好。谢谢了。
 
vvyang 的方法碰到最后2位数为00的会导致出错,其他人的全0也会出错,vvyang你有没有仔细看语句,我还是不明白我的语句为什么会误导人民群众了,因为我一直是这样使用的。
 
To jenhon:
不要生气啊,开个玩笑。
您语句的问题是显而易见的,举个例子:
00000000000010,共 14 位,照您的方法,转化完后是 0000000009,共 10 位,连位数都变了,还谈什么其它?
另外,如果编码的最后2位数为 00,我只能说这种编码不能减 1,在筛选的时候就应该排除这种情况,否则编者就该喝脑白金了。你想,一个编号为“01 00”的局级单位,转化后愣成了“00 99”的处级单位,就算是具有“中国特色”,也不能这么流氓吧???
您和楼上其它几位的缺陷就是:想当然地限制了编码的位数。既然人家以 2 位为操作单位,那处理最后 2 位就行了呗,何必辛辛苦苦在前面加那么多个“0”,再说加多少“0”合适啊?
 
呵呵,难得你有心来回话,算了,不生你的气了。

前面加多少个0,看字段长度就行,我都是这么做了,而且觉得是个正统的做法啊,给你说很没面子啊,不过我知道自己技术比不过你,你聪明,你的那个做法不错。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
446
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部