Как обновить строки со случайной датой

Вы можете использовать запускается с ()

String city = "London";
if (city.startsWith("Lon")) {
    // do something
}

62
задан Martin 27 April 2009 в 18:18
поделиться

5 ответов

Используйте это для генерации небольшого времени между 01 января 1900 и 06 июня 2079 года (не проверено, SQL не установлен)

DATEADD(day, (ABS(CHECKSUM(NEWID())) % 65530), 0)

NEWID лучше, чем попытка использовать RAND: RAND не генерирует другие значения строка в одном SELECT или UPDATE (ну, в SQL 2000 это не изменилось, если поведение изменилось).

Редактировать: вот так

UPDATE
  table
SET
  datetimecol = DATEADD(day, (ABS(CHECKSUM(NEWID())) % 65530), 0)

Редактировать: изменить с 65535 на 65530 и добавить ABS, чтобы избежать переполнения при верхнем пределе диапазон

76
ответ дан 24 November 2019 в 16:34
поделиться

Я дополню ответы ниже,

SELECT DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 3650), '2000-01-01')
FROM your_table

Это генерирует даты, начиная с 2000-01-01, и вы можете изменить количество дней в значении модуля, я положил 3650 (около 10 лет), этот подход не переполняется.

Если вы хотите обновить, то

UPDATE your_table
SET your_date_field = DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 3650), '2000-01-01')
WHERE your_conditions
55
ответ дан 24 November 2019 в 16:34
поделиться

Следующий код заполнит столбец StartDate таблицы FiscalYear случайными датами между двумя указанными датами:

-- First, let's declare the date range.
DECLARE @date_from DATETIME;
DECLARE @date_to DATETIME;

-- Set the start and date dates. In this case, we are using
-- the month of october, 2006.
SET @date_from = '1985-10-14';
SET @date_to = '2009-04-27';

UPDATE FiscalYear SET StartDate =  
(
    -- Remember, we want to add a random number to the
    -- start date. In SQL we can add days (as integers)
    -- to a date to increase the actually date/time
    -- object value.
    @date_from +
    (
        -- This will force our random number to be >= 0.
        ABS
        (
            -- This will give us a HUGE random number that
            -- might be negative or positive.
            CAST(CAST(NewID() AS BINARY(8)) AS INT)
        )

        -- Our random number might be HUGE. We can't have
        -- exceed the date range that we are given.
        -- Therefore, we have to take the modulus of the
        -- date range difference. This will give us between
        -- zero and one less than the date range.
        %

        -- To get the number of days in the date range, we
        -- can simply substrate the start date from the
        -- end date. At this point though, we have to cast
        -- to INT as SQL will not make any automatic
        -- conversions for us.
        CAST((@date_to - @date_from) AS INT)
    )
)
5
ответ дан 24 November 2019 в 16:34
поделиться

Используя приведенный ниже код, вы можете получить случайное целое число между @Min (1) и @Max (365), затем с помощью функции dateadd вы можете создавать случайные даты за последний год.

CREATE VIEW vRandNumber
AS
SELECT RAND() as RandNumber
GO

CREATE FUNCTION RandNumber(@Min int, @Max int)
RETURNS int
AS
 BEGIN
 RETURN round(@Min + (select RandNumber from vRandNumber) * (@Max-@Min),0)
 END
GO

Update table1
set theDate = dateadd(d,0-dbo.RandNumber(1,365),getdate())
0
ответ дан 24 November 2019 в 16:34
поделиться

вы можете попытаться получить случайное число (положительное или отрицательное), а затем добавить это число к дате (возможно, к системной дате).

Например (у меня нет доступа к праву sqlserver теперь я не могу проверить синтаксис)

DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1 - FLOOR(RAND(CAST(NEWID() AS binary(4))) * 365.25 * 90), 0)
1
ответ дан 24 November 2019 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: