我有一个像这样的varchar值:
DECLARE @TestConvert VARCHAR(MAX) = '1234.94-'
我想将此值转换为decimal(5,2)
喜欢这个:
SELECT CAST(@TestConvert AS DECIMAL(18, 4))
问题是值结尾处的符号。
如果标志位于开头,则为:
DECLARE @TestConvert VARCHAR(MAX) = '1234.94-'
我没问题。这有什么解决方案或解决方法吗?
感谢。
答案 0 :(得分:3)
对于SQL2012及以上版本<li *ngFor="#item of clients">
{{client.name}}
</li>
将处理此问题。 (我的测试框正在运行2016,所以如果这对您不起作用,请道歉)
PARSE
DECLARE @TestConvert VARCHAR(MAX) = '1234.94-'
SELECT PARSE(@TestConvert AS DECIMAL(18, 4)) AS Converted
Converted
---------------------------------------
-1234.9400
(1 row(s) affected)
文档https://msdn.microsoft.com/en-us/library/hh213316(v=sql.110).aspx
和相关的
PARSE
https://msdn.microsoft.com/en-us/library/hh213126(v=sql.110).aspx
答案 1 :(得分:1)
试试这个:
DECLARE @TestConvert VARCHAR(MAX) = '1234.94-'
SELECT CAST((RIGHT(@TestConvert,1)+LEFT(@TestConvert,LEN(@TestConvert)-1)) as DECIMAL(18,4))
这个答案假设&#39; - &#39;符号总是在最后
如果有时将值格式化为-1234.94,则可以执行以下操作:
DECLARE @TestConvert VARCHAR(MAX) = '1234.94-'
SELECT
CASE WHEN ISNUMERIC(@TestConvert)=1 THEN
CAST(@TestConvert AS Decimal(18,4) )
ELSE
CAST((RIGHT(@TestConvert,1)+LEFT(@TestConvert,LEN(@TestConvert)-1)) as DECIMAL(18,4))
END
答案 2 :(得分:1)
DECLARE @TestConvert VARCHAR(MAX) = '1234.94-'
if(charindex('-', @TestConvert) = len(@TestConvert))
begin
set @TestConvert = replace(@TestConvert, '-', '')
select 0 - cast(@TestConvert as DECIMAL(6, 2))
end
else
select cast(@TestConvert as DECIMAL(6, 2))
答案 3 :(得分:1)
你可以尝试
declare @val as nvarchar(max)='5656.99-'
select case when CHARINDEX('+',reverse(@val))=1 or CHARINDEX('-',reverse(@val))=1 then
CAST(REVERSE(STUFF(REVERSE(@val),1,1,'')) as decimal(18,2)) else cast(@val as decimal(18,2)) end
希望它能为任何案件转换价值。