2010-10-09 85 views

回答

12
4.9%1 

你可以做模量除以1

+0

真棒!........... – 2010-10-09 19:15:29

+0

@thyrgle ..不0.9是4.9/1整数除法的其余部分?但答案很好+1 – 2010-10-09 19:23:31

+0

@Gaby:是的,现在我想到了,但我记得有人说这不是。 – 2010-10-09 19:25:33

0
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' 
2

我能想到的最简单的将是

SELECT IntegerPart = cast(4.9 AS int), DecimalPart = 4.9 - cast(4.9 AS int) 
0

看看parsename功能。我认为下面的代码会产生预期的结果。 select parsename(4.9,2)给出4 select parsename(4.9,1)给出9 parsename的输出可以直接用作一个数字,例如 select parsename(4.9,2)* 2给出8的值

3
Declare @money money 

Set @money = 418.75 

Select convert(int,@money - (@money % 1)) as 'LeftPortion' 
     ,convert(int, (@money % 1) * 100) as 'RightPortion' 
0

另一种方法是

选择4.9-CAST(4.9作为INT)

1

许多主机数据输入处理(在金融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 
0

使用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 
0

我已经尝试了不同的方法,但这个看起来像工作的最好的转换的方式对我来说相当不错。

- 对于数字

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