以下是我想要的输出:
Number of slashes: 2
In 25 days it is: 19-FEB-15
The raw number is:
1.666666667E-01
The rounded number is: .17
Nearest Century: 01-JAN-01
我真的不确定如何将“dDate25”舍入到最近的世纪?
这是我到目前为止的代码:
SET SERVEROUTPUT ON
DECLARE
vFilePath VARCHAR2 (100) := 'c\Temp\ProcDB.mdf';
vFilePath1 VARCHAR2 (100);
nNumber16 FLOAT;
dDate25 DATE := SYSDATE+25;
BEGIN
vFilePath1 := REPLACE (vFILEPATH, '\');
DBMS_OUTPUT.PUT_LINE('Number of slashes:' || (LENGTH(vFilePath)-LENGTH(vFilePath1)));
DBMS_OUTPUT.PUT_LINE('In 25 days it is:' || to_char(dDate25, 'MM-DD-YYYY'));
nNumber16 := 1/6;
DBMS_OUTPUT.PUT_LINE('The raw number is: ' || to_char(nNumber16, '9.999999999EEEE'));
DBMS_OUTPUT.PUT_LINE('The rounded number is: ' || round(nNumber16, 2));
END;
谢谢,
答案 0 :(得分:1)
如果你想要“向下舍入”到当前世纪,你可以使用the TRUNC(date)
function(所以2051年的日期给了2001年);或者the ROUND(date)
function如果你想要正确地舍入(所以2051给出了2101)。无论哪种方式,使用CC格式掩码来获得本世纪的第一天:
SQL> select round(sysdate + 25, 'CC') from dual;
TRUNC(SYSDATE+25,'C
-------------------
2001-01-01 00:00:00
所以你可以使用:
ROUND(dDate25)
然后你可以根据需要格式化;没有任何NLS假设:
DBMS_OUTPUT.PUT_LINE('Nearest Century: '
|| TO_CHAR(ROUND(dDate25, 'CC'), 'DD-MON-RR', 'NLS_DATE_LANGUAGE=ENGLISH'));
答案 1 :(得分:0)
你的意思是十年而不是世纪,对吗?否则你的两个结束数字将永远是" 01" : - )
更正版本(我之前的版本总是返回01,因为它正在向下一个世纪进行舍入):
@Override
public void setText(CharSequence text, BufferType type) {
Spannable s = getTextWithImages(getContext(), text);
super.setText(s, BufferType.SPANNABLE);
}
翻译成您的代码:
SELECT SUBSTR(FLOOR(to_char(systimestamp, 'YYYY')/10)*10,3,1) || 1 FROM dual
答案 2 :(得分:0)
DECLARE
dDate25 DATE;
numYear NUMBER;
BEGIN
dDate25 := TO_DATE ('2016-01-27', 'YYYY-MM-DD');
SELECT (ROUND (TO_CHAR (dDate25, 'YYYY') / 100, 0) * 100) + 1
INTO numYear
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('First year of the nearest century to ' || TO_CHAR(dDate25, 'YYYY-MM-DD') || ' is: ' || numYear);
dDate25 := TO_DATE ('2116-01-27', 'YYYY-MM-DD');
SELECT (ROUND (TO_CHAR (dDate25, 'YYYY') / 100, 0) * 100) + 1
INTO numYear
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('First year of the nearest century to ' || TO_CHAR(dDate25, 'YYYY-MM-DD') || ' is: ' || numYear);
dDate25 := TO_DATE ('2051-01-27', 'YYYY-MM-DD');
SELECT (ROUND (TO_CHAR (dDate25, 'YYYY') / 100, 0) * 100) + 1
INTO numYear
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('First year of the nearest century to ' || TO_CHAR(dDate25, 'YYYY-MM-DD') || ' is: ' || numYear);
END;
输出:
2016-01-27最近世纪的第一年是:2001年
最近的世纪到2116-01-27的第一年是:2101
最近的世纪到2051年1月27日的第一年是:2101
ROUND (TO_CHAR (dDate25, 'YYYY') / 100, 0) * 100
为您提供最近的世纪,即它将在2055年到2100年之间。添加+1会为您提供最近世纪的第一年。
如果你需要在日期变量中,你可以TO_DATE(numYear || '-01-01', 'YYYY-MM-DD')
获得最近世纪第一年的1月1日。