在Oracle中,如何将数字值强制转换为单个字符?

在Oracle中,如何将数字值强制转换为单个字符?,oracle,casting,plsql,char,int,Oracle,Casting,Plsql,Char,Int,在几乎任何普通编程语言中,都可以使用类似于下面的转换轻松地将整数/短/字节转换为字符 char alpha = (char)123; 我尝试在Oracle数据库中执行此操作。我有一个类型为CHAR(1字节)的列,我希望能够在其中存储数值(其中非数值将大于30)。演员阵容不允许我这么做 rank := 10; CAST(rank as CHAR(1)) 其中,秩是一个数字变量。我得到一个错误: 转换操作数的值大于转换目标大小。 在Oracle PL/SQL中如何实现这一点?您有两个选择。您可以

在几乎任何普通编程语言中,都可以使用类似于下面的转换轻松地将整数/短/字节转换为字符

char alpha = (char)123;
我尝试在Oracle数据库中执行此操作。我有一个类型为CHAR(1字节)的列,我希望能够在其中存储数值(其中非数值将大于30)。演员阵容不允许我这么做

rank := 10;
CAST(rank as CHAR(1))
其中,秩是一个数字变量。我得到一个错误:

转换操作数的值大于转换目标大小。


在Oracle PL/SQL中如何实现这一点?

您有两个选择。您可以使用来添加字符并执行以下操作:

TO_CHAR(rank,'99')
或者使用CAST函数并通过提供更大的字符来修复您的尝试:

CAST(rank as CHAR(2))
原因正如奥利在他的评论中所描述的。

你可以试试这个:

SUBSTR(CAST(rank as CHAR(2)), 2, 1)

根据我对@northpole的回答的评论


最接近您想要的值可能不完全正确,但函数会将数字转换为ascii等效值。

i、 e.
alpha:=chr(113)
将字符“q”放入alpha变量,从而将数字“113”存储为单个字节。

您希望将两位数转换为一个字符字符。这个错误告诉你你需要知道的一切。一个字符是1字节,十进制数字10可以用一个字节(00001010)表示。我使用的是我作为程序员所习惯的“cast”一词的定义,这可能与SQL的定义不同。“Oracle以100为基数存储一个数字,每个字节可以存储2位数字,一个字节总是为指数保留”(From:)。你需要一个更大的专栏。@Ollie-我不知道它是这样工作的,我以为是字符长度。谢谢你指出这一点!我在northpole的回答中告诉你们我的评论。我不在乎存储一个具有任何意义的人类可读字符。我试图在一个单字节列中存储一个单字节值,该列恰好需要一个字符而不是一个数字。恐怕您误解了我的问题。我不想得到一个数字的字符串表示形式。我试图做的是在一个列中存储一个单字节数字,该列需要一个单字节字符。理论上,这应该很简单:一个一字节的数字可以很好地匹配一个一字节的列。例如,在Java或C#中,我可以通过简单地说char a=(char)113,将数字113(敏锐的观察者会注意到,当显示时是三个字符长)存储到一个单字节char变量中;结果字符是'q',但这与我完全无关。最接近您想要的可能不完全正确,但CHR函数会将数字转换为ascii等效值。i、 e.
alpha:=chr(113)
会将字符“q”放入alpha变量,从而将数字“113”存储为单个字节。这几乎正是我要寻找的。谢谢你,奥利。我会加上我的评论,作为未来人们搜索这个问题的答案。哇,我对这个问题的理解太离谱了。谢谢你清理它@Ollie