问题是这样的:有一个varchar类型的字段sid,内容为0123之类的字符!
我用left(sid,2)取出来的是1而不是01,用substring也一样!上网找了相关问题没找到!
所以来请教各位!望指点一二!谢谢!
我用left(sid,2)取出来的是1而不是01,用substring也一样!上网找了相关问题没找到!
所以来请教各位!望指点一二!谢谢!
解决方案 »
- 请问有没有比较详细介绍SQL SERVER2008中使用.NET程序集的文章?
- datetime 值越界 是怎么回事啊
- or 和 and 的问题!!
- Sql 查询的问题
- 作业调度突然不执行了!
- SQL Server2000触发器实现一个表的更新?
- oracle7.3安装后为什么不能登录?
- 这个问题恐怕高手也要头痛!如果是高手,不妨学习一下,呵呵
- web assistant怎么根据数据库中的数据生成一个页面?那个页面要我自己的样式。
- 请教一个问题,我想建一个存储过程,增加数据表字段和删除字段,这段存储过程应怎样写:
- 临时表的问题
- 分不多了,100分求一个疑难的分页语句,困扰几天了,没看内容复制答案的不要来。。。
insert @t select '0123'
select left(a,2) from @t----
01(所影响的行数为 1 行)
不会啊
select sid,
(case len(sid)
when 2 then 0
when 4 then left(sid,2)
end)
from table1应该是case返回了整数,而不是字符串,所以才会把前面的0给消掉了!
(
case when len(sid) = 2 then 0
when len(sid) = 4 then left(sid,2)
end
)
from table1 select sid,
(
case when len(sid) = 2 then 0
when len(sid) >= 4 then left(sid,2)
end
)
from table1
(case len(sid)
when 2 then 0
when 4 then left(rtrim(sid),2)
end)
from table1
dawugui指出的错误不是最终原因!我的数据最长就9位!
我完整的代码是这样:select citemccode,
case len(citemccode)
when 2 then 0
when 4 then left(citemccode,2)
when 6 then left(citemccode,4)
when 9 then left(citemccode,6)
end
from fitemss00class我试着把then后面的改成了字符串'asdf'它提示“将 varchar 值 'asdf' 转换为数据类型为 int 的列时发生语法错误”所以可以肯定在then后就被转换成int型了!
这样子也不对!select citemccode,
cast(case len(citemccode)
when 2 then 0
when 4 then cast(left(citemccode,2)as varchar(9))
when 6 then cast(left(citemccode,4)as varchar(9))
when 9 then cast(left(citemccode,6)as varchar(9))
end as varchar(9))
from fitemss00class
大家共同研究一下!谢谢!
case len(citemccode)
when 2 then '0'
when 4 then left(citemccode,2)
when 6 then left(citemccode,4)
when 9 then left(citemccode,6)
end
from fitemss00class因为你的0是一个整型,所以下面的字符型都转换成整型了,前面的0就去掉了
(case len(sid)
when 2 then 0
when 4 then left(sid,2)
end)
from (select '01' as sid union all select '0204') t
/**
sid
---- -----------
01 0
0204 2
**/select sid,
(case len(sid)
when 2 then '0'
when 4 then left(sid,2)
end)
from (select '01' as sid union all select '0204') t
/**
sid
---- ----
01 0
0204 02
**/