假设我有4.9值。
我想拆分4和.9 ......我怎么能这样做?
我可以使用FLOOR()来隔离4。 .9怎么样?我该如何隔离它?
我正在使用t-sql sql server 2005/2008
答案 0 :(得分:12)
4.9%1
你可以做模数除1。
答案 1 :(得分:3)
Declare @money money
Set @money = 418.75
Select convert(int,@money - (@money % 1)) as 'LeftPortion'
,convert(int, (@money % 1) * 100) as 'RightPortion'
答案 2 :(得分:2)
我能想到的最简单的就是
SELECT IntegerPart = cast(4.9 AS int), DecimalPart = 4.9 - cast(4.9 AS int)
答案 3 :(得分:1)
许多大型机数据导入过程(在金融行业中很常见)需要一个固定宽度的列输入文件,该文件定义浮点数,其中整数值为几列,十进制值为几列。即他们希望数字4.019表示为000401900,其中前4个字符对应于整数,最后5个对应于小数组件。
对于这个应用程序,你必须做相当多的字符串操作,但一个好的开始是获得一个查询,它给你两个包含4和'01900'的字段。
Parsename()加上str()可以解决问题:
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
答案 4 :(得分: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'
答案 5 :(得分:0)
看一下parsename函数。我认为下面的代码将产生预期的结果。 选择parsename(4.9,2)给出4 选择parsename(4.9,1)给出9 parsename的输出可以直接用作这样的数字 选择parsename(4.9,2)* 2给出vaule 8
答案 6 :(得分:0)
另一种方法是
选择4.9-CAST(4.9为int)
答案 7 :(得分: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
答案 8 :(得分: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
答案 9 :(得分:0)
使用以下查询:
使用PARSENAME
函数分割定界数据
SELECT value , PARSENAME(value,2) AS int_part,PARSENAME(value,1) AS DECIMAL_ONLY FROM table name
示例:4.9