十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
--/*
创新互联是一家专业从事成都网站设计、成都网站建设、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,创新互联依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!
--unicode编码范围:
--汉字:[0x4e00,0x9fa5](或十进制[19968,40869])
--数字:[0x30,0x39](或十进制[48, 57])
--小写字母:[0x61,0x7a](或十进制[97, 122])
--大写字母:[0x41,0x5a](或十进制[65, 90])
--根据编码范围来判断
--*/
--创建
create proc p_A_VIC
as
declare @count int
declare @i int
declare @text nvarchar(50)
set @i = 0
set @count = (select COUNT (*) from table )
while(@i @count )
begin
set @i +=1
--sid代表有一定循环规律的,若是无序的可以添加一个序列(Row_Number() OVER ---)。
--select * from (SELECT *, Row_Number() OVER ( ORDER BY [sid] ) num FROM s--table ) as s where num = 3
set @text = (select a from table where [sid] = @i)
if unicode(@text) between 19968 And 40869 or unicode(@text) between 97 And 122 or unicode('a') between 65 And 90
begin
print 0
end
else
print @text
end
--执行
exec p_A_VIC
创建函数
create FUNCTION [dbo].[Dec2Bin](@Dec INT, @StrLen INT)
RETURNS VARCHAR(31) -- INT型,4字节,正数转为二进制字符串最多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
select Convert(int,0xF) --15
select Convert(numeric(18,2),0x030100017D000000) --12.50
--10进制转换为2,8,16进制
Create Function DecTox(@A int,@Type Varchar(3))
Returns Varchar(100)
As
Begin
--从右到左,每一位乘上基数的i-1次方的和
Declare @Rst varchar(100)='' --保存结果
Declare @JS int --转换基数
Declare @YS int --余数
Set @JS=Case @Type
When 'Bin' Then 2
When 'Ocx' Then 8
When 'Hex' Then 16
Else Null End
While @A0
Begin
Set @YS=@A%@JS
Set @Rst=Case @YS
When 10 Then 'A'
When 11 Then 'B'
When 12 Then 'C'
When 13 Then 'D'
When 14 Then 'E'
When 15 Then 'F'
Else Convert(Varchar(2),@YS)
End+@Rst
Set @A=Convert(int,@A/@JS)
End
return @Rst
End
--2,8,16进制转换为10进制
Create Function fn_xToDec1(@A Varchar(50),@Type Varchar(3))
Returns int
As
Begin
--从右到左,每一位乘上基数的i-1次方的和
Declare @Rst int=0 --保存结果
Declare @JS int --转换基数
Declare @I int --字符串位置
Declare @J int
Set @JS=Case @Type
When 'Bin' Then 2
When 'Ocx' Then 8
When 'Hex' Then 16
Else Null End
Set @I=Len(@A) --从最后一个开始向前截取
Set @J=0
While @I0
Begin
Set @Rst=@Rst+Case substring(@A,@I,1)
When 'A' Then 10
When 'B' Then 11
When 'C' Then 12
When 'D' Then 13
When 'E' Then 14
When 'F' Then 15
Else substring(@A,@I,1)
End*power(@JS,@J)
Set @J=@J+1
Set @I=@I-1
End
return @Rst
End
SQLSERVER 里的 DECIMAL(5,2)的意思:最大5位数字,其中两位小数的数字类型。
Decimal 数据类型Decimal 变量存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数。
这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。
而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。
扩展资料
DECIMAL在其他开发工具的用法:
1、powerBuilder。
直接在编写控件的时候使用就可以了。比如:当编写一个Clicked事件脚本时就可以decimal r这样使用。
2、Visual Studio。
在一个浮点类型的值后加一个大写或小写的M,则编辑器会认为这个浮点类型的值是一个Decimal类型。这种128位高精度十进制数表示法通常用在财务计算中。
参考资料来源:百度百科-Decimal
我给你看SQL 对DECIMAL的官方定义:
decimal[(p[, s])] 和 numeric[(p[, s])]
定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词是 dec 和 dec(p, s)。
p(精度)
指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。
s(小数位数)
指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 = s = p。最大存储大小基于精度而变
。很明确的,decimal(3,2)的定义中,3表示一共是三位数,包括整数部分和小数部分,2表示有两位小数。所以就出错了。例如999.99,应该写成decimal(5,2)的形式。
把数据类型float改为 numeric(18,4)
注:numeric(p,s)p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0