Sql server nvarchar sql server中的楼层/天花板
我有一个字段名Sql server nvarchar sql server中的楼层/天花板,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有一个字段名Price3,它的类型是nvarchar(50)。现在,当我获取字段时,我需要应用floor/ceil,以获得预期的输出。 输入->输出 123欧元->123.00欧元 123.1223欧元->123.12欧元 123.1267欧元->123.13欧元 有多个货币与价格3字段关联,表示欧元不是静态的 我尝试了选择子字符串(Price3,0,CHARINDEX('.',Price3)+3)作为Price3MS SQL 2012(及更高版本) 在获得子字符串以及CONCAT后,您
Price3
,它的类型是nvarchar(50)
。现在,当我获取字段时,我需要应用floor/ceil
,以获得预期的输出。
输入->输出
123欧元->123.00欧元
123.1223欧元->123.12欧元
123.1267欧元->123.13欧元
有多个货币与价格3字段关联,表示欧元不是静态的
我尝试了
选择子字符串(Price3,0,CHARINDEX('.',Price3)+3)作为Price3
MS SQL 2012(及更高版本)
在获得子字符串
以及CONCAT
后,您可以使用转换
或转换
,以获得所需的输出
DECLARE @value4 varchar(50)='EUR 123';
SELECT CONCAT('EUR ',CONVERT(numeric(10,2),SUBSTRING(@value4,5,LEN(@value4)-3)));
MS SQL SERVER(早于2012年)
由于CONCAT
功能不可用。您必须手动CAST
或转换它,然后使用+
DECLARE @value varchar(50)='EUR 123';
SELECT 'EUR '+ CAST(CONVERT(numeric(10,2),ROUND(SUBSTRING(@value,5,LEN(@value)-3),2)) as VARCHAR(50));
如果所有货币都按空格计价。那么这个例子就行了
DECLARE @price3 NVARCHAR(50)
SET @price3 = 'EUR 123.9238'
SELECT
LEFT(@price3, CHARINDEX(' ', @price3)) + '->' + CAST(
ROUND(
CAST(
RIGHT(@price3, LEN(@price3) - CHARINDEX(' ', @price3)) AS MONEY
),
2
) AS NVARCHAR
)
从一开始就应该使用正确的数据类型的一个主要示例。但是,如果您的货币始终为欧元或一组有限的货币,则可以将货币替换为空字符串,然后将结果转换为正确的数据类型,以便您可以对该结果使用下限/上限操作。有多个货币与Price3字段相关联@AllanS.Hansenh如何将字符串转换为数字“EUR 123”?您将如何管理货币代码?@MannanBahelim更新了我的答案“CONCAT”不是公认的内置函数name@MannanBahelim这是在2012+年,问题有sql server 2012标记。在发表评论之前,至少进行谷歌搜索。@MannanBahelim我已经用其他版本的SQL Server的解决方案更新了我的答案。当我们设置@price3='EUR 123'时,我希望输出'EUR 123.00',您可以使用格式字符串来获取您想要的内容,或者将其转换为货币