CAST连字符( - )到十进制

Roh*_*ain -2 sql sql-server casting type-conversion

我必须在SQL Server中将CAST' - '(连字符号)改为十进制(8,2).

我正在创建一个CTE并将一些数据转储到包含一些列的表中.对于1列,我需要转储' - 'AS DECIMAL(8,2).我将如何实现这一目标......

我在用

    SELECT CAST('-' AS DECIMAL(8,2)) Column1
Run Code Online (Sandbox Code Playgroud)

抛出错误:将varchar转换为数据类型numeric的算术溢出错误.

"我知道上面的查询或铸造无法完成",但我需要以某种方式实现它!请帮忙

我有几个查询用于将数据转储到物理表中.除此之外,第一个查询是上面创建一个包含4列的表.在col1中我需要输入' - '符号,在其他查询中是一个十进制'列'.第二个查询是将数据插入到同一物理表中.在从这个动态创建的物理表中获取数据期间发生了一些计算.这就是我需要将' - '(连字符)转换为十进制列的原因

bil*_*nkc 7

你的基本问题是什么?你有一个糟糕的映射.

在此输入图像描述

我们有想要制作数字的字符串.问题是没有数值-因此,你需要对它做点什么.您的问题的问题在于,您没有指出代码在错误值的情况下应该执行的操作.

  • 我们是否炸毁了流程并停止将数据存储到表中?全有或全无可能有意义
  • 在处理"坏"数据时,系统是否使用了标记值.也许-1有意义.这是戈登采取的方法.
  • 我们可以在坏数据的位置使用NULL吗?
  • 我们应该不将这些行插入目标表吗?

如果您正在使用SQL Server 2012+,我们有一个TRY_CAST方法将尝试进行数据类型转换,如果不能,则该方法返回NULL.

IsNumericSQL Server内置了一个功能,但它不是100%可靠(需要引用).将其与CASE表达式配对,这将使Gordon的答案变得一致.

否则,您需要在源查询中添加过滤器以过滤掉那些不良行.在约会之前我遇到了类似的情况

  • 让我们清楚这个@RohitJain.你不能把一个海豚放在一个十分之一. (6认同)