преобразование INT ДО НАСТОЯЩЕГО ВРЕМЕНИ / ВРЕМЯ

Хотя я согласился бы с более высоким качественным оборудованием Cisco, если цена является большим беспокойством, Вы могли бы рассмотреть маршрутизатор программного обеспечения, такой как Vyatta. Это утверждает, что допускало большинство (если не все) функции маршрутизатора, включая VPN, и даже имеет бесплатную версию. Это - проект, у меня на самом деле есть подъем на этой неделе и затем, таким образом, я еще не могу действительно сказать многое об этом, но это достойное внимания, если Вы все еще рассматриваете во всех своих опциях.

2
задан 7 September 2011 в 14:09
2 ответа

Что вы хотите сделать, так это взять вашу «ужасную комбинацию» и адаптировать ее для преобразования этих целочисленных пар в значения типа datetime. Затем протестируйте это, используя столько крайних случаев, сколько вы можете придумать, возможно, даже проверьте это вручную на случайном подмножестве ваших фактических данных. Если вам очень повезет, вы сможете использовать существующий код, отображающий ваши данные в виде строки, и написать сценарий, который сравнивает выходные данные кода преобразования с фактическими выходными данными, чтобы убедиться, что каждый экземпляр выстроен в линию и гарантирует совершенство.

Когда код будет готов, используйте его ровно один раз, чтобы скопировать данные в новый столбец datetime, который вы добавите в таблицу для этой цели. После этого удалите старый столбец и переименуйте новый, чтобы он соответствовал старому имени. Теперь обновите любой код, который вставляет / обновляет / читает из исходного столбца, чтобы использовать тип данных datetime. Тогда никогда не говори об этом снова.

Чтобы все это происходило гладко, вам необходимо скоординировать выполнение сценариев настройки таблиц с развертыванием нового кода приложения. Если это приложение, работающее круглосуточно и без выходных, это может быть непросто, но результат того стоит.

4
ответ дан 3 December 2019 в 09:44

Это лучшее, что я могу придумать.

select
-- convert string to time value
CONVERT(time
    -- insert a colon between hours and minutes (position 3)
    , STUFF(
        -- insert a colon between minutes and seconds (position 5)
        STUFF(
            -- convert to string, pad left with zeroes to 6 characters
            RIGHT('000000' + CONVERT(varchar(6), @time_value_int), 6) 
        , 5, 0, ':')
    , 3, 0, ':')
) as time_converted

Сначала я начал математический путь, взяв целочисленное значение времени и используя целочисленное деление и модуль, чтобы получить части часов, минут и секунд, и умножив на эквивалент этой части времени с плавающей запятой (часы = 1 / 24,0, минуты = (1 / 24,0 / 60,0), секунды = (1 / 24,0 / 3600,0), затем сложив их вместе, только чтобы обнаружить, что вы не можете преобразовать float в тип данных TIME. Он скрывается в DATETIME, который затем можно преобразовать в TIME, но кажется, что есть потеря точности, поэтому результат может отличаться на несколько миллисекунд.

Таким образом, подход с изменением текста кажется более чистым.

1
ответ дан 3 December 2019 в 09:44

Теги

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