重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
您好:
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了潍坊免费建站欢迎大家使用!
跟您一个参考资料
第一种方法:
right('00000'+cast(@count as varchar),5)
其中'00000'的个数为right函数的最后参数,例如这里是5,所以有5个0
@count就是被格式化的正整数
例如:
1、select right('00000'+cast(dense_rank() over( order by zsbh ) as VARCHAR(20)),5)
2、declare @count int
set @count = 0
while (@count 1000)
begin
print right('00000'+cast(@count as varchar),5)
set @count = @count +1
end
第二种方法:使用REPLICATE函数,将字串值重复指定的次数。例如:
REPLICATE('重复',3)输出结果为:重复重复重复
【 值得注意的是当 integer_expression 值为负值,则返回NULL 】
因此,补0操作可如下实现:
SELECT REPLICATE('0',5-len('9'))+'9' --左边补0, 如 00009
SELECT '9' + REPLICATE('0',5-len('9')) --右边补0,如 90000
第三种方法:使用stuff函数,删除指定长度的字符,并在指定的起点处插入另一组字符。例如:
第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。
SELECT STUFF('abcdef', 2, 3, 'ijklmn')
输出结果为:
aijklmnef。
因此补0操作可如下实现:
select stuff('00000',len('00000')-len('123')+1,len('123'),'123')
直接用case语句不就行了?
CREATE TABLE test(id int)
INSERT INTO dbo.test
( id )
SELECT 1
UNION ALL
SELECT
2
UNION ALL
SELECT
10
UNION ALL
SELECT
18
UNION ALL
SELECT
113
UNION ALL
SELECT
117
UNION ALL
SELECT
1011
UNION ALL
SELECT
1200
语句:
1、
SELECT id,sid=CASE WHEN LEN(id)=1 THEN '000'+CAST(ID AS VARCHAR(10))
WHEN LEN(id)=2 THEN '00'+CAST(ID AS VARCHAR(10))
WHEN LEN(id)=3 THEN '0'+CAST(ID AS VARCHAR(10))
WHEN LEN(id)=4 THEN CAST(ID AS VARCHAR(10)) END
FROM test
2、
select id,sid=right('000'+CAST(ID AS VARCHAR(10)),4) from test
结果:
1 0001
2 0002
10 0010
18 0018
113 0113
117 0117
1011 1011
1200 1200
因为我用的int类型,所以类型转化
以上是sqlserver数据库的写法
我刚写了一个MySQL的类似sql查询。
1、将年、月、日和小时组合成一个字符串
2、月日时如果不是两位,在前面补0
3、将字符和判断区间的字符串值进行比较
select * from 表 where CONCAT(vyear
,LPAD(vmonth
,2,0),LPAD(vday,2,0),LPAD(Hour,2,0)) = '2017081000' and CONCAT(vyear,LPAD(vmonth,2,0),LPAD(vday,2,0),LPAD(Hour,2,0)) = '2017081023'
咱们来看:
cast('000000000'+convert(int,code)as varchar(20))
首先:
convert(int,code) :你把code 转为 int
然后
'000000000'+convert(int,code)我估计sqlserver肯定把表达式作为数字相加了,那么0000...的相加就没有作用了。
最后
就不是你要的结果了。
大致应该这样:
SELECT
right(cast('000000000'+rtrim(code) as varchar(20)),10),code,
id,pydate,isnull(lzdate,'9999-12-31'),0
FROM zlemployee
sqlserver自动,
把数字前面0省略,
应该设置的时候就是设置省略无意义数字。
sqlserver: select right(cast('0000000000'+rtrim(字段) as varchar(20)),7) oralce: select lpad(字段, 7 , '0') from dual