Sql 在oracle中屏蔽日期而不更改年份
我有一个脚本,我可以运行,以掩盖日期刚刚好。我的要求是日期不能向前移动,日历年不能更改,一月一日不能更改 我当前的代码在-1到-85天之间随机更改日期;但是我不确定是否应该将其更改为查询Julian日期,这样我就不会更改日历年…欢迎提供任何见解或帮助Sql 在oracle中屏蔽日期而不更改年份,sql,oracle,Sql,Oracle,我有一个脚本,我可以运行,以掩盖日期刚刚好。我的要求是日期不能向前移动,日历年不能更改,一月一日不能更改 我当前的代码在-1到-85天之间随机更改日期;但是我不确定是否应该将其更改为查询Julian日期,这样我就不会更改日历年…欢迎提供任何见解或帮助 create or replace FUNCTION a_function (a_date DATE) RETURN DATE AS a_val NUMBER; a_val1 NUMBER; a_date DATE; a_date1
create or replace FUNCTION a_function (a_date DATE)
RETURN DATE
AS
a_val NUMBER;
a_val1 NUMBER;
a_date DATE;
a_date1 DATE;
BEGIN
a_val := DBMS_RANDOM.VALUE (1, 85);
a_date := a_date + a_val;
IF TO_CHAR (a_date, 'YYYY') <> TO_CHAR (a_date, 'YYYY')
THEN
a_val1 := DBMS_RANDOM.VALUE (-1, -85);
a_date1 := a_date + (a_val1);
RETURN a_date1;
ELSE
RETURN a_date;
END IF;
END;
创建或替换函数a_函数(a_日期)
返回日期
作为
数值;
a_val1号;
日期;
a_date1日期;
开始
a_val:=DBMS_RANDOM.VALUE(1,85);
a_日期:=a_日期+a_值;
如果到字符(日期'YYYY')到字符(日期'YYYY')
然后
a_val1:=DBMS_RANDOM.VALUE(-1,-85);
a_date1:=a_date+(a_val1);
返回日期1;
其他的
返回一个日期;
如果结束;
结束;
我想试试
create or replace function a_function( a_date date )
return date
is
l_max_days integer;
begin
-- Don't change dates that occur on the first of the year2
if trunc(a_date) = trunc(a_date, 'YYYY')
then
return a_date;
end if;
l_max_days := to_number( to_char( a_date, 'DDD' ) ) - 1;
return trunc(a_date, 'YYYY') + dbms_random.value( 0, l_max_days );
end;
它获取一年中某个日期的日期,减去1,然后生成一个介于0和l_max_天之间的天数。因此,如果a_date
是,比如说,1月10日,l_max_days是9天,我们在一年的第一天加上0到8天,得到的日期是1月1日到1月9日。如果要允许返回的日期与输入日期匹配,可以从l\u max\u days
中删除-1
我想试试这样的东西
create or replace function a_function( a_date date )
return date
is
l_max_days integer;
begin
-- Don't change dates that occur on the first of the year2
if trunc(a_date) = trunc(a_date, 'YYYY')
then
return a_date;
end if;
l_max_days := to_number( to_char( a_date, 'DDD' ) ) - 1;
return trunc(a_date, 'YYYY') + dbms_random.value( 0, l_max_days );
end;
它获取一年中某个日期的日期,减去1,然后生成一个介于0和l_max_天之间的天数。因此,如果
a_date
是,比如说,1月10日,l_max_days是9天,我们在一年的第一天加上0到8天,得到的日期是1月1日到1月9日。如果要允许返回的日期与输入日期匹配,可以从l\u max\u days
中删除-1
两个选项:第一,获取一个随机较早的日期/时间;第二,获取一个随机的较早日期(没有时间成分)
Oracle 11g R2架构设置:
CREATE FUNCTION get_Random_Earlier_Datetime(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) );
END;
/
CREATE FUNCTION get_Random_Earlier_Day(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + FLOOR( DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) ) );
END;
/
SELECT DATE '2015-01-01' + LEVEL - 1 AS "Date",
get_Random_Earlier_Datetime( DATE '2015-01-01' + LEVEL - 1 ),
get_Random_Earlier_Day( DATE '2015-01-01' + LEVEL - 1 )
FROM DUAL
CONNECT BY LEVEL <= 10
| Date | GET_RANDOM_EARLIER_DATETIME(DATE'2015-01-01'+LEVEL-1) | GET_RANDOM_EARLIER_DAY(DATE'2015-01-01'+LEVEL-1) |
|---------------------------|-------------------------------------------------------|--------------------------------------------------|
| January, 01 2015 00:00:00 | January, 01 2015 00:00:00 | January, 01 2015 00:00:00 |
| January, 02 2015 00:00:00 | January, 01 2015 14:11:37 | January, 01 2015 00:00:00 |
| January, 03 2015 00:00:00 | January, 01 2015 09:24:25 | January, 01 2015 00:00:00 |
| January, 04 2015 00:00:00 | January, 01 2015 00:45:22 | January, 03 2015 00:00:00 |
| January, 05 2015 00:00:00 | January, 03 2015 11:54:39 | January, 04 2015 00:00:00 |
| January, 06 2015 00:00:00 | January, 05 2015 03:55:55 | January, 01 2015 00:00:00 |
| January, 07 2015 00:00:00 | January, 04 2015 01:12:23 | January, 02 2015 00:00:00 |
| January, 08 2015 00:00:00 | January, 06 2015 22:10:37 | January, 02 2015 00:00:00 |
| January, 09 2015 00:00:00 | January, 06 2015 10:47:04 | January, 04 2015 00:00:00 |
| January, 10 2015 00:00:00 | January, 06 2015 07:20:25 | January, 08 2015 00:00:00 |
查询1:
CREATE FUNCTION get_Random_Earlier_Datetime(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) );
END;
/
CREATE FUNCTION get_Random_Earlier_Day(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + FLOOR( DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) ) );
END;
/
SELECT DATE '2015-01-01' + LEVEL - 1 AS "Date",
get_Random_Earlier_Datetime( DATE '2015-01-01' + LEVEL - 1 ),
get_Random_Earlier_Day( DATE '2015-01-01' + LEVEL - 1 )
FROM DUAL
CONNECT BY LEVEL <= 10
| Date | GET_RANDOM_EARLIER_DATETIME(DATE'2015-01-01'+LEVEL-1) | GET_RANDOM_EARLIER_DAY(DATE'2015-01-01'+LEVEL-1) |
|---------------------------|-------------------------------------------------------|--------------------------------------------------|
| January, 01 2015 00:00:00 | January, 01 2015 00:00:00 | January, 01 2015 00:00:00 |
| January, 02 2015 00:00:00 | January, 01 2015 14:11:37 | January, 01 2015 00:00:00 |
| January, 03 2015 00:00:00 | January, 01 2015 09:24:25 | January, 01 2015 00:00:00 |
| January, 04 2015 00:00:00 | January, 01 2015 00:45:22 | January, 03 2015 00:00:00 |
| January, 05 2015 00:00:00 | January, 03 2015 11:54:39 | January, 04 2015 00:00:00 |
| January, 06 2015 00:00:00 | January, 05 2015 03:55:55 | January, 01 2015 00:00:00 |
| January, 07 2015 00:00:00 | January, 04 2015 01:12:23 | January, 02 2015 00:00:00 |
| January, 08 2015 00:00:00 | January, 06 2015 22:10:37 | January, 02 2015 00:00:00 |
| January, 09 2015 00:00:00 | January, 06 2015 10:47:04 | January, 04 2015 00:00:00 |
| January, 10 2015 00:00:00 | January, 06 2015 07:20:25 | January, 08 2015 00:00:00 |
两个选项:第一,获取随机较早的日期/时间;第二,获取一个随机的较早日期(没有时间成分) Oracle 11g R2架构设置:
CREATE FUNCTION get_Random_Earlier_Datetime(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) );
END;
/
CREATE FUNCTION get_Random_Earlier_Day(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + FLOOR( DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) ) );
END;
/
SELECT DATE '2015-01-01' + LEVEL - 1 AS "Date",
get_Random_Earlier_Datetime( DATE '2015-01-01' + LEVEL - 1 ),
get_Random_Earlier_Day( DATE '2015-01-01' + LEVEL - 1 )
FROM DUAL
CONNECT BY LEVEL <= 10
| Date | GET_RANDOM_EARLIER_DATETIME(DATE'2015-01-01'+LEVEL-1) | GET_RANDOM_EARLIER_DAY(DATE'2015-01-01'+LEVEL-1) |
|---------------------------|-------------------------------------------------------|--------------------------------------------------|
| January, 01 2015 00:00:00 | January, 01 2015 00:00:00 | January, 01 2015 00:00:00 |
| January, 02 2015 00:00:00 | January, 01 2015 14:11:37 | January, 01 2015 00:00:00 |
| January, 03 2015 00:00:00 | January, 01 2015 09:24:25 | January, 01 2015 00:00:00 |
| January, 04 2015 00:00:00 | January, 01 2015 00:45:22 | January, 03 2015 00:00:00 |
| January, 05 2015 00:00:00 | January, 03 2015 11:54:39 | January, 04 2015 00:00:00 |
| January, 06 2015 00:00:00 | January, 05 2015 03:55:55 | January, 01 2015 00:00:00 |
| January, 07 2015 00:00:00 | January, 04 2015 01:12:23 | January, 02 2015 00:00:00 |
| January, 08 2015 00:00:00 | January, 06 2015 22:10:37 | January, 02 2015 00:00:00 |
| January, 09 2015 00:00:00 | January, 06 2015 10:47:04 | January, 04 2015 00:00:00 |
| January, 10 2015 00:00:00 | January, 06 2015 07:20:25 | January, 08 2015 00:00:00 |
查询1:
CREATE FUNCTION get_Random_Earlier_Datetime(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) );
END;
/
CREATE FUNCTION get_Random_Earlier_Day(
in_date DATE
) RETURN DATE
AS
BEGIN
RETURN TRUNC( in_date, 'Y' ) + FLOOR( DBMS_RANDOM.VALUE( 0, in_date - TRUNC( in_date, 'Y' ) ) );
END;
/
SELECT DATE '2015-01-01' + LEVEL - 1 AS "Date",
get_Random_Earlier_Datetime( DATE '2015-01-01' + LEVEL - 1 ),
get_Random_Earlier_Day( DATE '2015-01-01' + LEVEL - 1 )
FROM DUAL
CONNECT BY LEVEL <= 10
| Date | GET_RANDOM_EARLIER_DATETIME(DATE'2015-01-01'+LEVEL-1) | GET_RANDOM_EARLIER_DAY(DATE'2015-01-01'+LEVEL-1) |
|---------------------------|-------------------------------------------------------|--------------------------------------------------|
| January, 01 2015 00:00:00 | January, 01 2015 00:00:00 | January, 01 2015 00:00:00 |
| January, 02 2015 00:00:00 | January, 01 2015 14:11:37 | January, 01 2015 00:00:00 |
| January, 03 2015 00:00:00 | January, 01 2015 09:24:25 | January, 01 2015 00:00:00 |
| January, 04 2015 00:00:00 | January, 01 2015 00:45:22 | January, 03 2015 00:00:00 |
| January, 05 2015 00:00:00 | January, 03 2015 11:54:39 | January, 04 2015 00:00:00 |
| January, 06 2015 00:00:00 | January, 05 2015 03:55:55 | January, 01 2015 00:00:00 |
| January, 07 2015 00:00:00 | January, 04 2015 01:12:23 | January, 02 2015 00:00:00 |
| January, 08 2015 00:00:00 | January, 06 2015 22:10:37 | January, 02 2015 00:00:00 |
| January, 09 2015 00:00:00 | January, 06 2015 10:47:04 | January, 04 2015 00:00:00 |
| January, 10 2015 00:00:00 | January, 06 2015 07:20:25 | January, 08 2015 00:00:00 |
请编辑您的问题,并提供样本数据和所需结果。样本数据可以是任何日期:01-Jan-00此日期永远不会更改(因为它是1月1日。34年7月7日可以更改为1934年内的任何日期。请编辑您的问题并提供样本数据和所需结果。样本数据将是任何日期:00年1月1日此日期永远不会更改(因为它是1月1日。34年7月7日可以更改为1934年内的任何日期)。