Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-删除十进制后的值(非整型字段)_Sql_Sql Server_Decimal_Rounding_Nvarchar - Fatal编程技术网

SQL Server-删除十进制后的值(非整型字段)

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

在SQL表中有一个ncarchar(MAX)字段。它有一些数字,如717.08064182582、39.0676048113等,其中我只需要在小数点后有3位。例如717.080,39.067

在不转换字段类型的情况下,希望去掉最后的n个字符,但是每行的字符数不同。我相信我可以使用ROUND(如果错误,请纠正我),但我宁愿不使用。

试试这个

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都是邪恶的,但那很可能就是这种情况。可能是复制的