在Oracle SQL中反转数字

时间:2015-02-08 21:26:18

标签: sql oracle select

我正在试图弄清楚如何制作它,以便第二个s_pin反向返回其内容。因此,"Coded Pin"需要s_pin反向。

SELECT s_last||', '|| s_first||LPAD(ROUND(MONTHS_BETWEEN(SYSDATE, s_dob)/12,0),22,'*' ) AS "Student Name and Age", s_pin AS "Pin", Reverse(s_pin) AS "Coded Pin"
FROM student
ORDER BY s_last;

输出看起来像这样:
enter image description here

3 个答案:

答案 0 :(得分:3)

Oracle的reverse函数接受char而不是number,因此您必须转换它:

SELECT   s_last||', '|| s_first||LPAD(ROUND(MONTHS_BETWEEN(SYSDATE, s_dob)/12,0),22,'*' ) AS "Student Name and Age", 
         s_pin AS "Pin", 
         REVERSE(TO_CHAR(s_pin)) AS "Coded Pin"
FROM     student
ORDER BY s_last;

注意 REVERSE是一个未记录的函数。如果您在申请中使用它,将来可能会有风险," IF"您希望升级到的更高版本中删除了此功能。并且很有可能他们最终可能会成为未来的文档功能,谁知道呢。因此,使用它需要您自担风险。

答案 1 :(得分:2)

TO_NUMBER (REVERSE( '' || s_pin)) AS "Coded Pin"应该适合你。如果您不需要使用 Coded Pin 进行计算,则可以省略TO_NUMBER函数

请参阅TO_NUMBERREVERSE

的文档 根据评论

p.s。 :请注意,使用TO_CHAR (s_pin)是更好的选择。 THX!

答案 2 :(得分:1)

您已经在使用Oracle支持的REVERSE()功能,但它仅适用于字符串,因此只需将s_pin值转换为字符串:

SELECT s_last||', '|| s_first||LPAD(ROUND(MONTHS_BETWEEN(SYSDATE, s_dob)/12,0),22,'*' ) AS "Student Name and Age"
     , s_pin AS "Pin" 
     , REVERSE(TO_CHAR(s_pin)) AS "Coded Pin"
FROM student
ORDER BY s_last;