⑴ 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小時在表中不存在的記錄,然後加一小時填入表中,不包括最後(最大的)的時間。
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