Sql 如何在强制转换后保留数据类型和小数-Oracle

Sql 如何在强制转换后保留数据类型和小数-Oracle,sql,oracle,Sql,Oracle,这一定是一个愚蠢的问题,但我无法找到正确的方法来处理以下情况。 我的目标是在varchar列中获取一个数字,并将其转换为十进制。但是,我还需要确保小数点保持不变。如何实现这一点,并确保数据类型保持为十进制(13,3) 我想要的输出是: Input : 11.0001 VARCHAR(40) Output : 11.000 DECIMAL(13,3) Input : 0.0001 VARCHAR(10) Output : 0.000 DECIMAL(13,3) Input : 18

这一定是一个愚蠢的问题,但我无法找到正确的方法来处理以下情况。
我的目标是在varchar列中获取一个数字,并将其转换为十进制。但是,我还需要确保小数点保持不变。如何实现这一点,并确保数据类型保持为十进制(13,3)

我想要的输出是:

Input : 11.0001  VARCHAR(40)  Output : 11.000 DECIMAL(13,3)
Input : 0.0001 VARCHAR(10)    Output : 0.000 DECIMAL(13,3)
Input : 18     VARCHAR(40)    Output : 18    DECIMAL(13,3)
任何帮助都将不胜感激


谢谢

我认为你问的问题不对。数字没有小数位。18等同于18.0等同于18.00。您可以格式化一个数字,这将为您提供一个按所需方式格式化的字符串,其中包含您想要的数字数量


如果您正在使用这些
VARCHAR2
,并将它们转换为数字,但想知道它们以前是如何显示的,那么您将丢失信息。为什么首先需要将这些转换为小数?你只是想用4位数的精度来计算,然后删除超过3位数的内容吗?

我对Oracle不是很熟悉,但我认为十进制零的显示只是一种显示设置。我认为不可能显示一个值的零,但不能显示另一个值的零。我刚刚检查过,我的NLS_数字_字符的会话参数是“.”。不知道如何使用它。@SDR。您无法控制
decimal
类型的小数显示方式。如果您需要该控件,请使用字符串。@GordonLinoff:您的意思是即使是我输出的前两个场景也不可能实现吗?@SDR。您可以使用
number
并将这些值作为数字插入到所需的小数点数量中。我不知道是否有其他方法可以获得可变精度。如果您关心的是它的外观,请在输出时格式化、添加计算列或存储为字符串。谢谢您的解释。。看来我想做错事了。我修改了代码,将那些没有正确小数位数的值出错,然后对其余的值进行了转换。这仍然保留了小数点的完整位置。
Input : 11.0001  VARCHAR(40)  Output : 11.000 DECIMAL(13,3)
Input : 0.0001 VARCHAR(10)    Output : 0.000 DECIMAL(13,3)
Input : 18     VARCHAR(40)    Output : 18    DECIMAL(13,3)