我正在试图弄清楚如何制作它,以便第二个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;
输出看起来像这样:
答案 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
函数
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;