如何在PL / SQL中生成年份为“1900”的随机日期?
例如,我想在一个名为date_random的变量中生成包含1900年的日期。
我尝试过多种方式(DATEADD,DATEDIFF)但无法获得结果。请帮忙吗?
答案 0 :(得分:3)
尝试一下:
DECLARE
l_date DATE;
BEGIN
l_date := TRUNC (SYSDATE, 'YYYY') +
ROUND (DBMS_RANDOM.VALUE (1, 365));
DBMS_OUTPUT.put_line (l_date);
/* And for a specific year */
l_date := TRUNC (DATE '1900-01-01', 'YYYY') +
ROUND (DBMS_RANDOM.VALUE (1, 365));
DBMS_OUTPUT.put_line (l_date);
END;
/
DBMS_RANDOM非常方便!
答案 1 :(得分:0)
这样的事可能有用吗?
declare @FromDate date = '1900-01-01'
declare @ToDate date = '1900-12-31'
select dateadd(day,
rand(checksum(newid()))*(1+datediff(day, @FromDate, @ToDate)),
@FromDate)
或许更像是:
SELECT DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 365), '1900-01-01')
FROM your_table
这会生成从1900-01-01
开始的日期,您可以更改模数值中的天数,我放365
(1年),此方法不会溢出。
答案 2 :(得分:0)
也试一试。纯SQL调整。希望这会有所帮助。
SELECT TRUNC(to_date('01/01/'
||'&enter_year','mm/dd/yyyy'),'month')+ROUND(dbms_random.value(1,
CASE
WHEN mod('&enter_year',4) = 0
THEN 366
ELSE 365
END)) days
FROM dual;