SQL Server-删除十进制后的值(非整型字段)
在SQL表中有一个ncarchar(MAX)字段。它有一些数字,如717.08064182582、39.0676048113等,其中我只需要在小数点后有3位。例如717.080,39.067 在不转换字段类型的情况下,希望去掉最后的n个字符,但是每行的字符数不同。我相信我可以使用ROUND(如果错误,请纠正我),但我宁愿不使用。试试这个SQL Server-删除十进制后的值(非整型字段),sql,sql-server,decimal,rounding,nvarchar,Sql,Sql Server,Decimal,Rounding,Nvarchar,在SQL表中有一个ncarchar(MAX)字段。它有一些数字,如717.08064182582、39.0676048113等,其中我只需要在小数点后有3位。例如717.080,39.067 在不转换字段类型的情况下,希望去掉最后的n个字符,但是每行的字符数不同。我相信我可以使用ROUND(如果错误,请纠正我),但我宁愿不使用。试试这个 SELECT CAST(ColumnName AS DECIMAL(18,3)) 不按照@vkp注释转换其数据类型 SELECT SUBSTRING(Colu
SELECT CAST(ColumnName AS DECIMAL(18,3))
不按照@vkp注释转换其数据类型
SELECT SUBSTRING(ColumnName ,0,CHARINDEX('.', ColumnName )+4)
试试这个
SELECT CAST(ColumnName AS DECIMAL(18,3))
不按照@vkp注释转换其数据类型
SELECT SUBSTRING(ColumnName ,0,CHARINDEX('.', ColumnName )+4)
试试这个:
SELECT SUBSTRING(Your_column, 1, PATINDEX('%.%', Your_column) + 3)
FROM Your_Table
试试这个:
SELECT SUBSTRING(Your_column, 1, PATINDEX('%.%', Your_column) + 3)
FROM Your_Table
这与前面的答案类似,但更快更安全
这与前面的答案类似,但在不转换字段类型的情况下更快、更安全。这将隐式舍入,即
717.08064182582
变为717.081
。我不确定OP想要的是什么,在这个例子中,请求的结果是717.080
@HoneyBadger:OP声明他可以使用ROUND
。但OP还声明“不转换字段类型”。冲突信息:P@vkp不转换如何才能获得预期结果?不转换字段类型,这将隐式舍入,即717.08064182582
变为717.081
。我不确定OP想要的是什么,在这个例子中,请求的结果是717.080
@HoneyBadger:OP声明他可以使用ROUND
。但OP还声明“不转换字段类型”。冲突信息:P@vkp如果不进行转换,如何获得预期的结果?在PATINDEX('.%',@nvar)>0时选择大小写,然后选择子字符串(@nvar,1,PATINDEX('.%',@nvar)+3)ELSE@nvar END
我的问题是,为什么你首先要将数字存储为字符串???@SeanLange也许这是一种邪恶的EAVtables@JamieD77哈哈。我不认为所有的EAV都是邪恶的,但很可能就是这种情况。当PATINDEX(“%。%”,@nvar)>0,然后子字符串(@nvar,1,PATINDEX)时,SELECT CASE的可能重复(“%。%,@nvar)+3)ELSE@nvar END
我的问题是,你为什么要首先将数字存储为字符串???@SeanLange也许这是一种邪恶的EAVtables@JamieD77哈哈。我不认为所有的EAV都是邪恶的,但那很可能就是这种情况。可能是复制的