当前位置:首页 » 编程语言 » sqlserver补0
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver补0

发布时间: 2022-04-20 05:44:05

sqlserver中如何判断一列中当值为一位数时前面插入000,二位数插入00,三位数插入0,四位就不做操作

直接用case语句不就行了?
CREATETABLEtest(idint)
INSERTINTOdbo.test
(id)
SELECT1
UNIONALL
SELECT
2
UNIONALL
SELECT
10
UNIONALL
SELECT
18
UNIONALL
SELECT
113
UNIONALL
SELECT
117
UNIONALL
SELECT
1011
UNIONALL
SELECT
1200
语句:
1、
SELECTid,sid=CASEWHENLEN(id)=1THEN'000'+CAST(IDASVARCHAR(10))
WHENLEN(id)=2THEN'00'+CAST(IDASVARCHAR(10))
WHENLEN(id)=3THEN'0'+CAST(IDASVARCHAR(10))
WHENLEN(id)=4THENCAST(IDASVARCHAR(10))END
FROMtest
2、
selectid,sid=right('000'+CAST(IDASVARCHAR(10)),4)fromtest

结果:

1 0001

2 0002

10 0010

18 0018

113 0113

117 0117

1011 1011

1200 1200

因为我用的int类型,所以类型转化

以上是sqlserver数据库的写法

⑵ sql 不够七位数 在左侧自动补零,怎么实现

sqlserver:
select right(cast('0000000000'+rtrim(字段) as varchar(20)),7)

oralce:
select lpad(字段, 7 , '0') from al

⑶ sql 不够七位数 在左侧自动补零,怎么实现

您好:

跟您一个参考资料

第一种方法:
right('00000'+cast(@countasvarchar),5)
其中'00000'的个数为right函数的最后参数,例如这里是5,所以有5个0
@count就是被格式化的正整数
例如:
1、selectright('00000'+cast(dense_rank()over(orderbyzsbh)asVARCHAR(20)),5)
2、declare@countint
set@count=0
while(@count<1000)
begin
printright('00000'+cast(@countasvarchar),5)
set@count=@count+1
end
第二种方法:使用REPLICATE函数,将字串值重复指定的次数。例如:
REPLICATE('重复',3)输出结果为:重复重复重复
【值得注意的是当integer_expression值为负值,则返回NULL】
因此,补0操作可如下实现:
SELECTREPLICATE('0',5-len('9'))+'9'--左边补0,如00009
SELECT'9'+REPLICATE('0',5-len('9'))--右边补0,如90000
第三种方法:使用stuff函数,删除指定长度的字符,并在指定的起点处插入另一组字符。例如:
第一个字符串abcdef中删除从第2个位置(字符b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。
SELECTSTUFF('abcdef',2,3,'ijklmn')

输出结果为:

aijklmnef。
因此补0操作可如下实现:
selectstuff('00000',len('00000')-len('123')+1,len('123'),'123')

⑷ sqlserver自动把数字前面0省略

sqlserver自动,
把数字前面0省略,
应该设置的时候就是设置省略无意义数字。

⑸ sqlserver 中,如何查询把缺少数据自动填补出来,下图中缺少2013-05-27 19:00:00.000 130.4560000000

  1. 问题分析:您要的结果是要每一小时一条记录,补充添写中间间隔一小时以上的记录。并且不另增加记录:

  2. 问题解决:找到每一条记录时间加1小时在表中不存在的记录,然后加一小时填入表中,不包括最后(最大的)的时间。

3.语句实现(两种方案):

以下语句可以在每一个缺少的数据后加入一小时后填入,但间隔更大(超过2小时后就不行了):

insert into tablename

select fieldtime=dateadd(hh,1,fieldtime),fieldnum from tablename a

where not exists(select 1 from tablename b where dateadd(hh,1,a.fieldtime)=b.fieldtime)

and a.fieldtime!=(select max(fieldtime) from tablename)--去掉最后的时间

以下方案可以完成补充间隔数小时的记录:将该语句循环执行,直到没有记录更改。

insert into tablename

select fieldtime=dateadd(hh,1,fieldtime),fieldnum from tablename a

where not exists(select 1 from tablename b where dateadd(hh,1,a.fieldtime)=b.fieldtime)

and a.fieldtime!=(select max(fieldtime) from tablename)--去掉最后的时间

while @@rowcount>0

select fieldtime=dateadd(hh,1,fieldtime),fieldnum from tablename a where not exists(select 1 from tablename b where dateadd(hh,1,a.fieldtime)=b.fieldtime) and a.fieldtime!=(select max(fieldtime) from tablename)

⑹ SQL不够10位 补0 补到10位写何写


咱们来看:

cast('000000000'+convert(int,code)asvarchar(20))

首先:

convert(int,code) :你把code 转为 int

然后

'000000000'+convert(int,code)我估计sqlserver肯定把表达式作为数字相加了,那么0000...的相加就没有作用了。

最后

就不是你要的结果了。


大致应该这样:

SELECT
right(cast('000000000'+rtrim(code)asvarchar(20)),10),code,
id,pydate,isnull(lzdate,'9999-12-31'),0
FROMzlemployee



⑺ sqlserver查询一列某几个数据的结果,如果没有值补0。

这个可以用update语句来做,等于那个值放在条件中。

⑻ SQL SERVER自动在前面补0满足10位请问怎么写

咱们来看:

cast('000000000'+convert(int,code)asvarchar(20))

首先:

convert(int,code) :你把code 转为 int

然后

'000000000'+convert(int,code)我估计sqlserver肯定把表达式作为数字相加了,那么0000...的相加就没有作用了。

最后

就不是你要的结果了。


大致应该这样:

SELECT
right(cast('000000000'+rtrim(code)asvarchar(20)),10),code,
id,pydate,isnull(lzdate,'9999-12-31'),0
FROMzlemployee

⑼ SQL怎样在固定值后面补0

具体什么数据库?

以sqlserver,mysql,oracle各自为例:

sqlserver:

createtabletest
(点名varchar(20));

insertintotestvalues('HS901');
insertintotestvalues('HS9010');
insertintotestvalues('HS9010');

执行:

selectLEFT(点名+'00000000',8)fromtest

结果:

⑽ sqlserver同时对一个表进行增加

你这个问题,如果数据已经到了99,再加1怎么办?是变成100,还是什么?


如果是100。那么你之前01,02。这样的数据,是不是默认几位数,不足的补0?

--代码基本实现功能,但是由于你的需求我并不是很明确,所以先这样吧。
CREATEPROCEDUREproc_Add
@newProjectIDnvarchar(20)OUTPUT
AS
BEGIN
BEGINTRANSACTION
DECLARE@errorint=0
DECLARE@projectIDnvarchar(20)
DECLARE@indexint
DECLARE@numbernvarchar(20)

SELECTTOP(1)@projectID=a.ProjectIDFROMdbo.tbASa
ORDERBYa.IDDESC

SET@number=SUBSTRING(@projectID,CHARINDEX('-',@projectID,4)+1,LEN(@projectID))

SET@index=PATINDEX('%[1-9]%',@number)

IF(@index=0)
BEGIN
SET@newProjectID=SUBSTRING(@projectID,1,CHARINDEX('-',@projectID,4))+'01'
END
ELSE
BEGIN
IF(@index=1)
BEGIN
SET@number=CAST(@numberASint)+1
SET@newProjectID=SUBSTRING(@projectID,1,CHARINDEX('-',@projectID,4))+@number
END
ELSEIF(@index=2)
BEGIN
IF(CAST(SUBSTRING(@number,2,1)ASint)=9)
BEGIN
SET@newProjectID=SUBSTRING(@projectID,1,CHARINDEX('-',@projectID,4))+'10'
END
ELSE
BEGIN
SET@number='0'+CAST(SUBSTRING(@number,2,1)ASint)+1
SET@newProjectID=SUBSTRING(@projectID,1,CHARINDEX('-',@projectID,4))+@number
END
END
END

IF(@error=0)
COMMITTRANSACTION
ELSE
ROLLBACKTRANSACTION
END