這樣:
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)怒江州,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
SELECT
a.dt AS '時(shí)間',
ISNULL(b.yield, '0') AS '數(shù)據(jù)'
FROM
(
SELECT
dateadd(d, number, '2018-11-01') dt
FROM
master..spt_values
WHERE
type = 'p'
AND dateadd(d, number, '2018-11-01') = '2018-11-30'
) a
LEFT JOIN CE_BD_E_ELECTRIC_WORKSHIFT_T b ON a.dt = b.opdate
擴(kuò)展資料:
注意事項(xiàng)
COALESCE是一個(gè)函數(shù), (expression_1, expression_2, …,expression_n)依次參考各參數(shù)表達(dá)式,遇到非null值即停止并返回該值。如果所有的表達(dá)式都是空值,最終將返回一個(gè)空值。使用COALESCE在于大部分包含空值的表達(dá)式最終將返回空值。
場(chǎng)景一:你想要獲取最大值,然后+1返回(即返回的值已經(jīng)默認(rèn)為空了),程序接收了本來(lái)不該為空的值去運(yùn)算,就會(huì)出錯(cuò)。
SELECT MAX(my_money)+1 FROM tb_test;
改進(jìn)方法:使用 coalesce函數(shù)? ?COALESCE(值1, 值2,......, 值n) ,只要遇到非null值就返回。
這樣子就可以設(shè)置一個(gè)值,讓你第一個(gè)不成功后,返回指定的值,如下面,返回的是1.
SELECT COALESCE(MAX(my_money)+1, 1) FROM tb_test;
sqlserver:
select right(cast('0000000000'+rtrim(字段) as varchar(20)),7)
oralce:
select lpad(字段, 7 , '0') from dual
具體什么數(shù)據(jù)庫(kù)?
以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ù)過(guò)程都差不多,不贅述,執(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)開(kāi)始的三個(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')
只要原字段是字符型,直接加沒(méi)有問(wèn)題的。只是不知作何用。
select yourfileds + space(n) from yourtable
咱們來(lái)看:
cast('000000000'+convert(int,code)as?varchar(20))
首先:
convert(int,code) :你把code 轉(zhuǎn)為 int
然后
'000000000'+convert(int,code)我估計(jì)sqlserver肯定把表達(dá)式作為數(shù)字相加了,那么0000...的相加就沒(méi)有作用了。
最后
就不是你要的結(jié)果了。
大致應(yīng)該這樣:
SELECT?
right(cast('000000000'+rtrim(code)?as?varchar(20)),10),code,
id,pydate,isnull(lzdate,'9999-12-31'),0?
FROM?zlemployee