創(chuàng)建函數

商水ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
create?FUNCTION?[dbo].[Dec2Bin](@Dec?INT,?@StrLen?INT)
RETURNS?VARCHAR(31)?--?INT型,4字節(jié),正數轉為二進制字符串最多31位
AS
BEGIN
DECLARE?@BinStr?AS?VARCHAR(31)??????--?二進制表示的字符串
DECLARE?@Div2?AS?INT????????????????--?商
DECLARE?@Mod2?AS?INT????????????????--?模/余數
IF?@Dec??0
RETURN?'NULL'??????????????--?不支持負數的轉換
SET?@Div2?=?@Dec?/?2?
SET?@Mod2?=?@Dec?%?2?
SET?@BinStr?=?''
WHILE?@Div2??0
BEGIN
SET?@BinStr?=?CAST(@Mod2?AS?CHAR(1))?+?@BinStr
SET?@Dec?=?@Dec?/?2
SET?@Div2?=?@Dec?/?2
SET?@Mod2?=?@Dec?%?2
END;
SET?@BinStr?=?CAST(@Mod2?AS?CHAR(1))?+?@BinStr?--?至此,已完成十進制到二進制的轉換
IF?@StrLen??LEN(@BinStr)????--?如果用戶指定的長度大于實際長度,則需要左邊補0
BEGIN
IF?@StrLen??31????--?返回的長度,最長為32
SET?@StrLen?=?31
DECLARE?@ZeroStr?VARCHAR(31)????--?需要補充的"0000..."
DECLARE?@OffsetLen?TINYINT???????--?需要補充幾個"0"
SET?@ZeroStr?=?''
SET?@OffsetLen?=?@StrLen?-?LEN(@BinStr)
WHILE??@OffsetLen??0
BEGIN
SET?@ZeroStr?=?@ZeroStr?+?'0'
SET?@OffsetLen?=?@OffsetLen?-?1
END
SET?@BinStr?=?@ZeroStr?+?@BinStr
END
RETURN?@BinStr
END
調用函數
select?[dbo].[Dec2Bin](3,8)
其中3是要轉換的數字,8是最后二進制的長度,不足位的前補0
moneydecimal(18,2)。
1、定點精度,小數點左邊和右邊可以存儲的十進制數字的最大個數,最大精度為38。
2、表示小數位數,小數點右邊可以存儲的十進制數字的最大個數,小數位必須是0~18之間,SQLServer 是Microsoft 公司推出的關系型數據庫管理系統(tǒng)。具有使用方便可伸縮性好與相關軟件集成程度高等優(yōu)點,可跨越從運行MicrosoftWindows98 的膝上型電腦到運行MicrosoftWindows2012 的大型多處理器的服務器等多種平臺使用。
把數據類型float改為 numeric(18,4)
注:numeric(p,s)p(精度)和s(小數位數)。p指定小數點左邊和右邊可以存儲的十進制數字的最大個數,p必須是從?1到38之間的值。s指定小數點右邊可以存儲的十進制數字的最大個數,s必須是從0到p之間的值,默認小數位數是0
SQLSERVER 里的 DECIMAL(5,2)的意思:最大5位數字,其中兩位小數的數字類型。
Decimal 數據類型Decimal 變量存儲為 96 位(12 個字節(jié))無符號的整型形式,并除以一個 10 的冪數。
這個變比因子決定了小數點右面的數字位數,其范圍從 0 到 28。變比因子為 0(沒有小數位)的情形下,最大的可能值為 +/-79,228,162,514,264,337,593,543,950,335。
而在有 28 個小數位的情況下,最大值為 +/-7.9228162514264337593543950335,而最小的非零值為 +/-0.0000000000000000000000000001。
擴展資料
DECIMAL在其他開發(fā)工具的用法:
1、powerBuilder。
直接在編寫控件的時候使用就可以了。比如:當編寫一個Clicked事件腳本時就可以decimal r這樣使用。
2、Visual Studio。
在一個浮點類型的值后加一個大寫或小寫的M,則編輯器會認為這個浮點類型的值是一個Decimal類型。這種128位高精度十進制數表示法通常用在財務計算中。
參考資料來源:百度百科-Decimal
et @r=@r+
convert(BIGint,
(
case
when @s='9' then @s
when @s='A' then '10'
when @s='B' then '11'
when @s='C' then '12'
when @s='D' then '13'
when @s='E' then '14'
when @s='F' then '15'
end
))
*power(Cast(16 as bigint),len(@Hex)-@i)
利用SQLSERVER中的varbinary來間接實現。
16進制字符串轉10進制bigint(0-FFFFFFFFFFFFFFFF):
由于二進制比較容易轉換為bigint 所以先將字符串轉為二進制varbinary,再轉換為10進制
CREATE??function?[dbo].[hextoint](@s?varchar(16))?
returns?bigint??
begin?
declare?@result?bigint
set?@result=CONVERT(bigint,?CONVERT(varbinary,?CAST(N'0x'?+?@s?AS?char),?1))--最簡單有效的方法
return?@result
END
GO
10進制轉16進制字符串(bigint正負數都可以):相同的思路目前可以將二進制varbinary轉換為字符串比較容易,那么先將10進制轉二進制再進行16進制字符串輸出
CREATE???function?[dbo].[inttohex](@num?bigint)?
returns?varchar(16)??
begin?
declare?@num2?varbinary(8),@r?varchar(50)
set?@num2=convert(varbinary(8),@num)--直接轉換為二進制
set?@r=?dbo.varbin2hexstr(@num2)--二進制轉16進制字符串
return?@r?
end?
GO
CREATE?function?[dbo].[varbin2hexstr](
@bin?varbinary(8000)
)returns?varchar(8000)
as
begin
declare?@re?varchar(8000),@i?int
select?@re='',@i=datalength(@bin)
while?@i0
select?@re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
+substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
+@re
,@i=@i-1
--?return('0x'+@re)
return?@re
end
GO
以上代碼測試環(huán)境WIN2003+SQLSERVER2008
本文名稱:十進制SQLserver,十進制SQLserver
網頁地址:http://chinadenli.net/article9/dsghcoh.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站建設、做網站、品牌網站制作、全網營銷推廣、手機網站建設、服務器托管
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)