我必须在SQL Server中将CAST' - '(连字符号)改为十进制(8,2)。
我正在创建一个CTE并将一些数据转储到包含一些列的表中。对于1列,我需要转储' - 'AS DECIMAL(8,2)。我将如何实现这一目标......
我正在使用
SELECT CAST('-' AS DECIMAL(8,2)) Column1
抛出错误:将varchar转换为数据类型为数字的算术溢出错误。
“我知道上面的查询或投射无法完成”,但我需要以某种方式实现它!请帮忙
我有几个查询用于将数据转储到物理表中。除此之外,第一个查询是上面创建一个包含4列的表。在col1中我需要输入' - '符号,在其他查询中是一个十进制'列'。第二个查询是将数据插入到同一物理表中。在从这个动态创建的物理表中获取数据期间发生了一些计算。这就是原因,我需要将' - '(连字符)转换为十进制列
答案 0 :(得分:7)
你的基本问题是什么?你的映射不好。
我们想要制作成数字的字符串。问题是-
没有数字值因此,您需要对此做些什么。您的问题的问题在于,您还没有说明在错误值的情况下代码应该执行的操作。
如果你正在使用SQL Server 2012+,我们有一个TRY_CAST
方法将尝试进行数据类型转换,如果不能,则该方法返回NULL。
SQL Server中内置了IsNumeric
函数,但它不是100%可靠(需要引用)。将其与CASE
表达式配对,这将使Gordon的答案变得一致。
否则,您需要在源查询中添加过滤器以过滤掉那些错误的行。我之前遇到了similar situation日期
答案 1 :(得分:1)
假设您想要在列中强制转换值,那么只需使用case
语句来检查连字符:
SELECT (CASE WHEN col = '-' THEN CAST(0 AS DECIMAL(8,2))
ELSE CAST(col as DECIMAL(8, 2))
END) as column1;
如果开头或结尾有空格,您可能需要各种形式的修剪。