具體什么數(shù)據(jù)庫?
貴定網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
以sqlserver,mysql,oracle各自為例:
sqlserver:
create?table?test
(點(diǎn)名?varchar(20));
insert?into?test?values?('HS901');
insert?into?test?values?('HS9010');
insert?into?test?values?('HS9010');
執(zhí)行:
select?LEFT(點(diǎn)名+'00000000',8)?from?test
結(jié)果:
mysql:創(chuàng)建表插入數(shù)據(jù)過程都差不多,不贅述,執(zhí)行:
create?table?test
(點(diǎn)名?varchar(20));
insert?into?test?values?('HS901');
insert?into?test?values?('HS9010');
insert?into?test?values?('HS9010');
結(jié)果:
oracle:執(zhí)行:
select?rpad(點(diǎn)名,8,'0')?from?test
結(jié)果:
您好:
跟您一個(gè)參考資料
第一種方法:
right('00000'+cast(@count?as?varchar),5)
其中'00000'的個(gè)數(shù)為right函數(shù)的最后參數(shù),例如這里是5,所以有5個(gè)0
@count就是被格式化的正整數(shù)
例如:
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函數(shù),將字串值重復(fù)指定的次數(shù)。例如:
REPLICATE('重復(fù)',3)輸出結(jié)果為:重復(fù)重復(fù)重復(fù)
【?值得注意的是當(dāng)?integer_expression?值為負(fù)值,則返回NULL?】
因此,補(bǔ)0操作可如下實(shí)現(xiàn):
SELECT?REPLICATE('0',5-len('9'))+'9'?--左邊補(bǔ)0,?如?00009
SELECT?'9'?+?REPLICATE('0',5-len('9'))?--右邊補(bǔ)0,如?90000
第三種方法:使用stuff函數(shù),刪除指定長(zhǎng)度的字符,并在指定的起點(diǎn)處插入另一組字符。例如:
第一個(gè)字符串?abcdef?中刪除從第?2?個(gè)位置(字符?b)開始的三個(gè)字符,然后在刪除的起始位置插入第二個(gè)字符串,從而創(chuàng)建并返回一個(gè)字符串。
SELECT?STUFF('abcdef',?2,?3,?'ijklmn')
輸出結(jié)果為:
aijklmnef。
因此補(bǔ)0操作可如下實(shí)現(xiàn):
select?stuff('00000',len('00000')-len('123')+1,len('123'),'123')
咱們來看:
cast('000000000'+convert(int,code)as?varchar(20))
首先:
convert(int,code) :你把code 轉(zhuǎn)為 int
然后
'000000000'+convert(int,code)我估計(jì)sqlserver肯定把表達(dá)式作為數(shù)字相加了,那么0000...的相加就沒有作用了。
最后
就不是你要的結(jié)果了。
大致應(yīng)該這樣:
SELECT?
right(cast('000000000'+rtrim(code)?as?varchar(20)),10),code,
id,pydate,isnull(lzdate,'9999-12-31'),0?
FROM?zlemployee
問題分析:您要的結(jié)果是要每一小時(shí)一條記錄,補(bǔ)充添寫中間間隔一小時(shí)以上的記錄。并且不另增加記錄:
問題解決:找到每一條記錄時(shí)間加1小時(shí)在表中不存在的記錄,然后加一小時(shí)填入表中,不包括最后(最大的)的時(shí)間。
3.語句實(shí)現(xiàn)(兩種方案):
以下語句可以在每一個(gè)缺少的數(shù)據(jù)后加入一小時(shí)后填入,但間隔更大(超過2小時(shí)后就不行了):
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)--去掉最后的時(shí)間
以下方案可以完成補(bǔ)充間隔數(shù)小時(shí)的記錄:將該語句循環(huán)執(zhí)行,直到?jīng)]有記錄更改。
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)--去掉最后的時(shí)間
while @@rowcount0
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)
這個(gè)問題是因?yàn)樵O(shè)置的是12小時(shí)制的,比如hh:mm:ss 就不會(huì)顯示00:00:00而是顯示12:00:00
你可以改為HH:mm:ss試試,大寫的HH表示使用24小時(shí)制的就可以變成你需要的數(shù)據(jù)