看你的需求,应该是一个应用软件中的需求。
既然这样数据库中是不是应该有个日期表?
如果没有建议建一张表,存放日期
tabledate:
2009-01
2009-02
2009-03
2009-04
2009-12
那么向新表插入的时候可以以此日期表为准
insert into table2(id,date,amount)
select table1id,table1date,table1amount
from tabledate left join table1 on tabledatedate=table1date
order by table1id,table1date
恩,结果和你想要的是有一些差别。就是如果ID和余额如果与上一条记录相同(注意上面的order by),那么就为空。余额还有个特殊情况,就是为0的时候也是为null
那么在插入的时候可以判断如果为Null就插入一个特殊值
再根据这个特殊值写几个Update语句去更新。
1、创建测试表,
create table test_num(id number, value number);
2、插入测试数据
insert into test_num values(1,15);
insert into test_num values(2,13);
insert into test_num values(3,132325);
insert into test_num values(4,157681);
commit;
3、查询表中数据,select t,rowid from test_num t;
4、编写sql,保留2位小数,如果整数 后面补0;
select t,
case
when not regexp_like(round(value, 2), '\D') then
round(value, 2) || '00'
else
to_char(round(value, 2))
end as value2
from test_num t;
如果该列是char或者varchar类型 直接:
update 表名
set 列名='0'+列名
就可以
如果该列是数值型,可以用
update 表名
set 列名='0'+ltrim(rtrim(str(列名)))
原来sql还有个stuff的函数,很强悍。
一个列的格式是单引号后面跟着4位的数字,比如'0003,'0120,'4333,我要转换成3,120,4333这样的格式,就是去掉单引号和前导的0,用以下语句就可以。
SELECT
stuff(
substring
([当前组织],2,4),1,patindex('%[^0]%',substring([当前组织],2,4))-1,''),人员编码
FROM
dboorgusermap$
where
人员编码
is
not
null
咱们来看:
cast('000000000'+convert(int,code)as varchar(20))首先:
convert(int,code) :你把code 转为 int
然后
'000000000'+convert(int,code)我估计sqlserver肯定把表达式作为数字相加了,那么0000的相加就没有作用了。
最后
就不是你要的结果了。
大致应该这样:
SELECTright(cast('000000000'+rtrim(code) as varchar(20)),10),code,
id,pydate,isnull(lzdate,'9999-12-31'),0
FROM zlemployee
跟你说就知道了
定义一个char类型的变量@str,然后值@str='00000000'+@m这个@m要转成char类型的
然后插入的时候写 right(@str,5)
这里是取5位。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)