Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在oracle中屏蔽日期而不更改年份_Sql_Oracle - Fatal编程技术网

Sql 在oracle中屏蔽日期而不更改年份

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

我有一个脚本,我可以运行,以掩盖日期刚刚好。我的要求是日期不能向前移动,日历年不能更改,一月一日不能更改

我当前的代码在-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  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年内的任何日期)。