假设我有4.9的价值。如何从整数值中拆分十进制值?
我想拆分4和.9 ...我该怎么做?
我可以通过使用FLOOR()来隔离4。那么.9呢?我如何分离它?
我使用T-SQL的SQL Server 2005/2008
假设我有4.9的价值。如何从整数值中拆分十进制值?
我想拆分4和.9 ...我该怎么做?
我可以通过使用FLOOR()来隔离4。那么.9呢?我如何分离它?
我使用T-SQL的SQL Server 2005/2008
4.9%1
你可以做模量除以1
Declare @dec decimal(8,2)
Set @dec = 23.98
Select Left(@dec, CharIndex('.',@dec)-1) as 'LeftPortion',
RIGHT(@Dec, len(@dec) - CharIndex('.',@dec)) as 'RightPortion'
我能想到的最简单的将是
SELECT IntegerPart = cast(4.9 AS int), DecimalPart = 4.9 - cast(4.9 AS int)
看看parsename功能。我认为下面的代码会产生预期的结果。 select parsename(4.9,2)给出4 select parsename(4.9,1)给出9 parsename的输出可以直接用作一个数字,例如 select parsename(4.9,2)* 2给出8的值
Declare @money money
Set @money = 418.75
Select convert(int,@money - (@money % 1)) as 'LeftPortion'
,convert(int, (@money % 1) * 100) as 'RightPortion'
另一种方法是
选择4.9-CAST(4.9作为INT)
许多主机数据输入处理(在金融INDUSTR可悲共同y)需要一个固定宽度的列输入文件,该文件定义了具有整数值的几列和十进制值的几列的浮点数。即他们希望数字4.019表示为000401900,其中前4个字符对应于整数,最后5个对应于小数部分。
对于这个应用程序,你必须做相当数量的字符串操作,但一个好的开始是获得一个查询,给你两个包含4和'01900'的字段。再加上海峡
PARSENAME()()做的伎俩:
select integer_part = ltrim(str(4.019,25,0)), decimal_part = parsename(str(4.019, 25, 5),1)
STR()焊盘与左边的空间,所以你需要为LTRIM整数。您可能只是在此处投射int。 Parsename只是解析出定期的字符串标记。
下面是这个方法的一个问题。要小心,不要敷衍了事您decimal_part列的数据类型:
select integer_part = 1, decimal_part = 4
union all
select integer_part = ltrim(str(4.019,25,0)), decimal_part = parsename(str(4.019, 25, 5),1)
结果:
integer_part decimal_part
1 4
4 1900
这里的目的 '01900' 变成了1900。因此:在
select integer_part = 1, decimal_part = cast(4 as varchar(32))
union all
select integer_part = ltrim(str(4.019,25,0)), decimal_part = parsename(str(4.019, 25, 5),1)
结果:
integer_part decimal_part
1 4
4 01900
使用PATINDEX如下
declare @val nvarchar(10) = '4.9'
select
LEFT(@val,PATINDEX(N'%[.]%', @val)-1) Int_Val,
RIGHT(@val, len(@val) - PATINDEX(N'%[.]%', @val) + 1) Dec_Val
我已经尝试了不同的方法,但这个看起来像工作的最好的转换的方式对我来说相当不错。
- 对于数字
Select
Left(COLUMN_NAME, Case When CharIndex('.',COLUMN_NAME) = 0 Then 0 Else
CharIndex('.',COLUMN_NAME)-1 END) as 'LeftPortion',
RIGHT(COLUMN_NAME, len(COLUMN_NAME) - CharIndex('.',COLUMN_NAME)) as
'RightPortion'
From TABLE_NAME
- 若要找到最大长度
Select
COLUMN_NAME,
MAX(LEN(Left(COLUMN_NAME, Case When Ind = 0 Then 0 Else Ind-1 END))) as
LenBeforedecimal,
MAX(LEN(Right(COLUMN_NAME, LEN(COLUMN_NAME) - Ind))) as afterdecimal
From
(Select
COLUMN_NAME,
CHARINDEX('.', Cast(COLUMN_NAME as varchar(30))) as Ind
From TABLE_NAME) a
Group BY COLUMN_NAME
真棒!........... – 2010-10-09 19:15:29
@thyrgle ..不0.9是4.9/1整数除法的其余部分?但答案很好+1 – 2010-10-09 19:23:31
@Gaby:是的,现在我想到了,但我记得有人说这不是。 – 2010-10-09 19:25:33