假设我有4.9的值。
我想要将4和.9分离...我该怎么做?
我可以使用FLOOR()来隔离4。那么.9呢?我该如何隔离它?
我正在使用t-sql sql server 2005/2008。
我想要将4和.9分离...我该怎么做?
我可以使用FLOOR()来隔离4。那么.9呢?我该如何隔离它?
我正在使用t-sql sql server 2005/2008。
4.9%1
你可以使用模数除以1。
Declare @money money
Set @money = 418.75
Select convert(int,@money - (@money % 1)) as 'LeftPortion'
,convert(int, (@money % 1) * 100) as 'RightPortion'
SELECT IntegerPart = cast(4.9 AS int), DecimalPart = 4.9 - cast(4.9 AS int)
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
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
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
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'
另一种方法是
选择 4.9-CAST(4.9 as int)
看一下parsename函数。我认为以下代码将产生所需的结果。 选择parsename(4.9,2)会得到4 选择parsename(4.9,1)会得到9 parsename的输出可以直接用作数字,例如 选择parsename(4.9,2)* 2会得到值8
使用以下查询:
使用PARSENAME
函数拆分分隔的数据
SELECT value , PARSENAME(value,2) AS int_part,PARSENAME(value,1) AS DECIMAL_ONLY FROM table name
example:4.9
我尝试了不同的方法,但这个看起来是最好的,对我来说效果非常好。
-- 对于数字
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