Как заменить в дате год sql
Перейти к содержимому

Как заменить в дате год sql

  • автор:

Как заменить в дате год sql

Update only Year, Month or Day in a SQL Server Date

We have an automated process to load exchange rates into a SQL Server database using a backend process. We found that it loaded almost all of the records perfectly except for a few records, for which it chose some random years when loading the data into the table. The day and month are correct, only the year was different. It is still an unresolved mystery, but the main problem was how to update the dates to the correct year with minimal effort in SQL Server.

Solution

After some research I found that we can use the DATEADD() function to select and replace just the year part from the date column to the correct year.

Let’s demonstrate how.

Create Test SQL Server Table and Data

Let’s first create a table.

Insert some dummy data into the table as shown below.

After you insert the records into table, it should look as below:

Sample data with invalid year from start_Date column

As you can see, the end_date shows the last day of the month and the start_date shows the first day of the month. If you look closely, the year is not the current year. The year for rows 5 through row 18 should be 2019.

Update only the YEAR part of a SQL Server date using the DATEADD() function

Let’s use the DATEADD() function to update the year from the start_date to a different year.

Use the below query to see if we are getting the desired results. We are replacing the year portion of the date with «2019».

After you run the above query the output should look like below.

Date comparision from actual date and modified data using getdate function

If you look closely you will see the difference as highlighted. The start_date_modified column has the current year (2019) whereas the start_date which is the actual stored value in the table shows different years. Now we are able to get the desired result from the SELECT statement.

The next step is to modify the start_date column with the current year.

Use the below script to modify the year part of start_date column to 2019.

Make sure you use a WHERE clause to ensure you are not updating the entire table and only the desired columns are getting updated. Also, you might also want to create a table backup before you update the records. The backup will help you revert the changes if the result is not as expected. You could also run the update in a transaction and rollback if needed.

After running the UPDATE statement successfully, you will see start_date column is updated as expected and you will see start_date value shows the correct year as shown below:

Table data with date column after updating with the correct year using getdate()

This is the quickest and easy way to address such situations. You can use the DATEADD() function for other uses like modifying the day or month from date column if required as we will show below.

Update only the DAY part of a SQL Server date using the DATEADD() function

As we can see in the above screenshot, the start_date is the first day of the month. Let’s assume you are supposed change the start_date to the 2 nd day of the month instead of first day of the month. We can use the DATEADD() function to achieve this as we did for the year part of start_date column.

Use the below script to change only the day part of the start_date. Also, we will just update certain rows again.

You can see that start_date_modified has a start date as the 2 nd day of the month instead of the 1 st day of the month as shown below.

How to update only day of the month from start_Date

As you can see, you can use a function to change the day of the month to any specific day you want.

You can use below UPDATE statement to update the day of the month in the start_date column.

Caution: Make sure you use an appropriate WHERE clause before you run the UPDATE statement and ensure you take a table backup before you make any changes, it will help you to rollback changes to previous state in case of any accidental updates.

Update only the MONTH part of a SQL Server date using the DATEADD() function

Similarly, if you have been asked to change the month of the start_date column to specific month for few records of the table based on some condition, then you can use the dateadd() function to do the same.

Use below script to change the only day part of the start_date.

After you run above query you will see the output as shown below and you can see for all the rows start_date column month has been changed to 10 th month of the year.

how to update 10th month of the year in start_date

You can use dateadd() function to change the month to any specific month you want. You can use below UPDATE statement to update the month for the start_date column.

Use the below script to change the only month part of the start_date.

Summary

You can use the DATEADD() function to change the day, month, year, quarter, dayofyear, week, weekday, hour, minute, second, milliseconds, microsecond and nanosecond as needed. For more details you can refer to this article about the DATEADD() function.

Next Steps
  • Let me know your feedback or similar situations you faced.
  • Check out these related articles:
    • Simplify Date Period Calculations in SQL Server
    • SQL Server Function to return a range of dates

    get scripts

    next tip button

    About the author

    Atul Gaikwad has over 14+ years of experience with SQL Server. He currently works for one of the leading MNCs in Pune as a Delivery Manager.

    Comments For This Article

    Saturday, October 16, 2021 — 5:33:10 AM — Rajesh Back To Top (89337)
    How to change 1st date of every month on 7th date in sql
    Thursday, August 19, 2021 — 6:02:29 PM — Greg Robidoux Back To Top (89153)
    Thanks Philip, the code has been updated.

    Personally, for this kind of fixed value update on dates, I prefere better DATEFROMPARTS().
    It’s just a bit more straight forward and therefore clear:

    Thanks for the post ��

    I got a syntax error and had to change the code slightly from this:

    to this. (removed the extra bracket):

    Can I also suggest an alternative for SQL 2012 onwards, which personally I find easier to read as I’m not mathematically minded:

    Изменение года в дате mysql

    У меня есть куча дат в нашей базе данных, хранящихся в стандартном типе даты mysql.

    Как я могу скрыть год до 2013 года, независимо от исходной даты.

    Итак, если дата 2009-01-01, это будет 2013-01-01, но если это 2012-01-04, она будет конвертироваться в 2013-01-14.

    Я понял, что это будет просто и очевидно, но я не мог понять это =/

    5 ответов

    Проблема с текущими ответами заключается в том, что ни один из них не учитывает високосный год. Если вы берете дату «2016-02-29» и конвертируете ее в 2013 год через конкатенацию, вы получаете «2013-02-29», что не является допустимой датой. Если вы запустите DATE_FORMAT (‘2013-02-29’, ‘% Y-% m-% d’), результат будет null . Пример:

    Лучший способ изменить год — использовать DATE_ADD, поскольку он учитывает переход на летнее время. Например:

    Вы можете заменить CURRENT_DATE() на «2013-01-01», если вы все еще хотите преобразовать все даты в 2013 году вместо текущего года. Пример этого решения:

    Изменение год в дате в MySQL

    У меня есть куча дат в нашей базе данных, хранящихся в стандартном типе даты mysql.

    Как я могу скрыть год до 2013, независимо от первоначальной даты.

    поэтому, если дата 2009-01-01, это будет 2013-01-01, но если это 2012-01-04, она будет преобразована в 2013-01-14.

    Я подумал, что это будет просто и очевидно, но я не мог понять это=/

    5 ответов

    другой способ-объединить его,

    проблема с текущими ответами заключается в том, что ни один из них не учитывает високосный год. Если вы возьмете дату «2016-02-29» и преобразуете ее в 2013 год через конкатенацию, вы получите «2013-02-29», которая не является действительной датой. Если вы запустите DATE_FORMAT (‘2013-02-29′,’ %Y-%m-%d’), результатом будет null . См. пример здесь:

    лучший способ изменить год-использовать DATE_ADD, так как он учитывает дневной свет сбережения. Например:

    вы можете заменить CURRENT_DATE () на «2013-01-01», если вы все еще хотите преобразовать все даты в 2013 вместо текущего года. Пример этого решения приведен здесь:

    Microsoft SQL Server
    Даты

    Округление данных datetime. Дробные значения секунды. Точность datetime округляется до приращений .000, .003 или .007 секунд, как показано в следующей таблице.

    Пользовательское значение Системное сохраненное значение
    01/01/98 23: 59: 59.999 1998-01-02 00: 00: 00.000
    —— ——
    01/01/98 23: 59: 59.995 1998-01-01 23: 59: 59.997
    01/01/98 23: 59: 59.996
    01/01/98 23: 59: 59.997
    01/01/98 23: 59: 59.998
    —— ——
    01/01/98 23: 59: 59.992 1998-01-01 23: 59: 59.993
    01/01/98 23: 59: 59.993
    01/01/98 23: 59: 59.994
    —— ——
    01/01/98 23: 59: 59.990 1998-01-01 23: 59: 59.990
    01/01/98 23: 59: 59.991
    —— ——

    Если требуется более высокая точность, следует использовать time , datetime2 или datetimeoffset .

    Форматирование даты и времени с использованием CONVERT

    Вы можете использовать функцию CONVERT для приведения типа данных datetime в форматированную строку.

    Вы можете также использовать некоторые встроенные коды для преобразования в определенный формат. Вот варианты, встроенные в SQL Server:

    @convert_code Результат
    100 «21 июля 2016 7:56 утра»
    101 «07/21/2016»
    102 «2016.07.21»
    103 «21/07/2016»
    104 «21.07.2016»
    105 «21-07-2016»
    106 «21 июля 2016 года»
    107 «21 июля 2016 года»
    108 «7:57:05»
    109 «21 июля 2016 7: 57: 45: 707AM»
    110 «07-21-2016»
    111 «2016/07/21»
    112 «20160721»
    113 «21 июля 2016 года 07: 57: 59: 553»
    114 «07: 57: 59: 553»
    120 «2016-07-21 07:57:59»
    121 «2016-07-21 07: 57: 59.553»
    126 «2016-07-21T07: 58: 34,340»
    127 «2016-07-21T07: 58: 34,340»
    130 «16: 1437 7: 58: 34: 340AM»
    131 «16/10/1437 7: 58: 34: 340AM»

    Форматирование даты и времени с использованием FORMAT

    Вы можете использовать новую функцию: FORMAT() .

    Используя это, вы можете преобразовать поля DATETIME в свой собственный формат VARCHAR .

    пример

    Понедельник, 5 сентября 2016 года 12:01:02

    аргументы

    Учитывая, что формат DATETIME отформатирован, 2016-09-05 00:01:02.333 , следующий график показывает, каков будет их вывод для предоставленного аргумента.

    аргументация Выход
    гггг 2016
    уу 16
    MMMM сентябрь
    М.М. 09
    M 9
    дддд понедельник
    ддд понедельник
    дд 05
    d 5
    HH 00
    ЧАС 0
    чч 12
    час 12
    мм 01
    м 1
    сс 02
    s 2
    тт AM
    T
    FFF 333
    Ф.Ф. 33
    е 3

    Вы также можете предоставить один аргумент функции FORMAT() для генерации предварительно форматированного вывода:

    Понедельник, 5 сентября 2016 года 4:01:02

    Одиночный аргумент Выход
    D Понедельник, 5 сентября 2016 г.
    d 9/5/2016
    F Понедельник, 5 сентября 2016 года 12:01:02
    е Понедельник, 5 сентября 2016 года 12:01
    г 5/5/2016 12:01:02
    г 5/5/2016 12:01
    M Сентябрь 05
    О 2016-09-05T00: 01: 02,3330000
    р Пн, 05 сен 2016 00:01:02 GMT
    s 2016-09-05T00: 01: 02
    T 12:01:02 AM
    T 12:01
    U Понедельник, 5 сентября 2016 года 4:01:02
    U 2016-09-05 00: 01: 02Z
    Y Сентябрь 2016 года

    Примечание. В приведенном выше списке используется культура en-US . Для FORMAT() через третий параметр можно указать другую культуру:

    Получить текущую дату

    Встроенные функции GETDATE и GETUTCDATE возвращают текущую дату и время без смещения часового пояса.

    Возвращаемое значение обеих функций основано на операционной системе компьютера, на котором запущен экземпляр SQL Server.

    Возвращаемое значение GETDATE представляет текущее время в том же часовом поясе, что и операционная система. Возвращаемое значение GETUTCDATE представляет текущее время UTC.

    Любая функция может быть включена в предложение SELECT запроса или как часть логического выражения в WHERE .

    Есть еще несколько встроенных функций, которые возвращают разные варианты текущего времени:

    DATEADD для добавления и вычитания периодов времени

    Чтобы добавить меру времени, number должен быть положительным. Чтобы вычесть значение времени, number должно быть отрицательным.

    ПРИМЕЧАНИЕ. DATEADD также принимает аббревиатуры в параметре datepart . Использование этих сокращений обычно обескураживается, поскольку они могут вводить в заблуждение ( m vs mi , ww vs w и т. Д.).

    Ссылка на детали даты

    Это значения datepart доступные для функций даты и времени:

    DatePart Сокращения
    год yy, yyyy
    четверть qq, q
    месяц мм, м
    DayOfYear dy, y
    день dd, d
    неделю wk, ww
    будний день dw, w
    час чч
    минут mi, n
    второй ss, s
    миллисекунды Миз
    микросекунда MCS
    наносекунда нс

    ПРИМЕЧАНИЕ . Использование сокращений обычно обескураживается, поскольку они могут вводить в заблуждение ( m vs mi , ww vs w и т. Д.). Длинная версия представления datepart способствует ясности и удобочитаемости и должна использоваться по возможности ( month , minute , week , weekday и т. Д.).

    DATEDIFF для расчета разницы во времени

    Он вернет положительное число, если datetime_expr в прошлом datetime_expr2 к datetime_expr2 и отрицательное число в противном случае.

    ПРИМЕЧАНИЕ. DATEDIFF также принимает аббревиатуры в параметре datepart . Использование этих сокращений обычно обескураживается, поскольку они могут вводить в заблуждение ( m vs mi , ww vs w и т. Д.).

    DATEDIFF также может использоваться для определения смещения между UTC и локальным временем SQL Server. Следующий оператор можно использовать для расчета смещения между временем по Гринвичу и местным временем (включая часовой пояс).

    DATEPART & DATENAME

    DATEPART возвращает указанное число datepart указанного выражения datetime как числовое значение.

    DATENAME возвращает строку символов, которая представляет заданную datepart в определенную дату. На практике DATENAME в основном полезен для получения названия месяца или дня недели.

    Существуют также некоторые сокращенные функции для получения года, месяца или дня выражения datetime, которые ведут себя как DATEPART с их соответствующими единицами datepart .

    ПРИМЕЧАНИЕ. DATEPART и DATENAME также принимают аббревиатуры в параметре datepart . Использование этих сокращений обычно обескураживается, поскольку они могут вводить в заблуждение ( m vs mi , ww vs w и т. Д.).

    Получение последнего дня месяца

    Используя функции DATEADD и DATEDIFF , можно вернуть последнюю дату месяца.

    Функция EOMONTH обеспечивает более сжатый способ возврата последней даты месяца и имеет необязательный параметр для смещения месяца.

    Вернуть только дату из DateTime

    Существует много способов вернуть дату из объекта DateTime

    1. SELECT CONVERT(Date, GETDATE())
    2. SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) возвращается 2016-07-21 00: 00: 00.000
    3. SELECT CAST(GETDATE() AS DATE)
    4. SELECT CONVERT(CHAR(10),GETDATE(),111)
    5. SELECT FORMAT(GETDATE(), ‘yyyy-MM-dd’)

    Обратите внимание, что опции 4 и 5 возвращают строку, а не дату.

    Создать функцию для расчета возраста человека на определенную дату

    Эта функция будет принимать 2 параметра datetime, DOB и дату для проверки возраста на

    например, чтобы проверить возраст сегодня кого-то, родившегося 1 / 1/2000

    ОБЪЕКТ ПРОГРАММЫ CROSS PLATFORM

    В Transact SQL вы можете определить объект как Date (или DateTime ), используя [DATEFROMPARTS][1] (или [DATETIMEFROMPARTS][1] ), например, следующую:

    Параметры, которые вы предоставляете: Год, Месяц, День для функции DATEFROMPARTS а для функции DATETIMEFROMPARTS вам необходимо DATEFROMPARTS год, месяц, день, час, минуты, секунды и миллисекунды.

    Эти методы полезны и заслуживают внимания, потому что использование простой строки для создания даты (или даты и времени) может привести к сбою в зависимости от настроек региона, местоположения или формата файла главной машины.

    Похожие публикации:

    1. Как правильно писать sql запросы
    2. Как проверить сайт на sql инъекции
    3. Как развернуть sql базу 1с
    4. Как связать таблицы в sql запросе

    Datetime в Python — работа со временем и датой

    Работа с датой и временем в модуле Python datetime

    Для работы с датой и временем в Python 2 и 3 есть отдельный модуль datetime. В отличие от других языков, таких как SQL, в Python нет встроенного типа данных для работы с датой и временем — это достигается путем импорта модуля и созданием объекта. Модуль datetime входит в пакет Python и его не нужно отдельно устанавливать.

    Импорт модуля осуществляется следующим путем:

    import datetime

    Навигация по посту

    • Получение текущей даты и времени
    • Форматирование и перевод в строку
      • Получения дня недели и название месяца
      • Создание из строк
      • Разница между датами

      Получение текущей даты и времени

      Для вывода даты и времени нужно выполнить следующее:

      import datetime day_time = datetime.datetime.now() print(day_time)

      Получение текущей даты и времени в Python datetime

      Как видно мы получаем для создания объекта даты и времени используется класс с тем же именем что и модуль datetime.

      Когда нужно получить только дату используется класс date:

      import datetime day = datetime.date.today() print(day)

      Получение текущей даты в Python datetime

      Получение только времени выполняется через метод time():

      import datetime date_time = datetime.datetime.now().time() print(date_time, type(date_time))

      Получение времени в Python datetime

      Каждый из описываемых классов можно импортировать следующим способом:

      from datetime import date from datetime import datetime print(datetime.now()) print(date.today())

      Импорт модуля datetime в Python

      Форматирование и перевод в строку

      Для получение части даты или времени можно использовать следующие атрибуты:

      import datetime # Получение дня от даты date = datetime.date.today() print(date.day) date_time = datetime.datetime.now() # Получение часа суток от времени print(date_time.hour)

      Форматирование строки с датой в Python datetime

      Так же есть метод strftime, который форматирует даты в нужном формате в строку. Например так мы получим дату в формате, который используется у нас:

      import datetime date = datetime.datetime.today() print(date.strftime('%d-%m-%Y %H:%M'))

      Форматирование в datetime Python

      • %d — день месяца с 1 по 31;
      • %m — месяц с 1 по 12;
      • %Y — год;
      • %H — час в формате 0-24;
      • %M — минуты;
      • %S — секунды.

      Таким же способом можно получить время и дату:

      • %c — время и дата;
      • %x — дата;
      • %X — время.
      date = datetime.datetime.today() print(date.strftime('%x'))

      Форматирование в datetime Python

      Обратите внимание, что таким способом мы преобразуем объект класса datetime в строку и мы больше не сможем использовать методы по работе с датой (например сравнение):

      import datetime date = datetime.datetime.today() local_date = date.strftime('%d-%m-%Y %H:%M') print('Объект класса datetime: ', type(date)) print('Дата преобразованная в строку: ', type(local_date)) print(local_date.day)

      Типы дат в datetime Python

      Мы получим ошибку так как уже работаем со строкой:

      • AttributeError: ‘str’ object has no attribute ‘day’

      Выше описаны основные возможности форматирования используя метод strftime(), но их, конечно, больше.

      Получения дня недели и название месяца

      Можно получить название дня недели или название. Численный вариант эквивалентен следующим значениям:

      • 0 — Monday (Понедельник);
      • 1 — Tuesday (Вторник);
      • 2 — Wednesday (Среда);
      • 3 — Thursday (Четверг);
      • 4 — Friday (Пятница);
      • 5 — Saturday (Суббота);
      • 6 — Sunday (Воскресенье).

      Следующий пример вернет день недели в виде числа:

      date = datetime.datetime.today() print(date.weekday())

      Получение дня недели в Python datetime

      Или получить название:

      date = datetime.datetime.today() print(date.strftime('%A')) print(date.strftime('%a'))
      • %A — полное название дня недели;
      • %a — сокращенное название дня недели;
      • %s — представление в виде числа.

      Такой же принцип по работе с месяцами, где:

      • %B — полное название месяца;
      • %b — сокращенное название месяца;
      • %m — месяц в виде числа.

      Создание объекта даты и времени

      Для создания даты используется класс с аргументами date(год, месяц, число):

      date = datetime.date(2019, 1, 13) print(date, type(date))

      Создание объекта с даты в Python datetime

      Можно создать дату и время. В обоих случаях мы можем использовать именованные аргументы если так удобнее:

      date_time = datetime.datetime(year = 2019, month = 2, day = 4, hour = 7, minute = 9, second = 13 ) print(date_time, type(date_time))

      Создание объекта с датой и временем в Python datetime

      Каждый аргумент времени, по умолчанию, имеет значение 0. Мы так же можем использовать подход выше для получения, например, только года или времени:

      date_time = datetime.datetime(year = 2019, month = 2, day = 4, second = 13 ) # Получаем только время time = date_time.strftime('%X') print(time, type(time)) date = datetime.date( year = 2018, month = 5, day = 3 ) # Получаем только год year = date.year print(year, type(year))

      Именованные аргумента в datetime Python

      Если вы не укажете год, месяц или день, то получите ошибку т.к. они по умолчанию равны None:

      • TypeError: Required argument ‘year’ (pos 1) not found

      Есть отдельный класс для создания времени time:

      time = datetime.time(12, 33, second=33, microsecond=122) print(time, type(time)) print(time.hour)

      Создание объекта времени в datetime Python

      Создание из строк

      Используя strptime() можно создавать объект datetime из строки:

      date_string = '21 September. 1999' date_object = datetime.strptime(date_string, '%d %B. %Y') print(date_object, type(date_object))

      Создание даты из строки с datetime strptime Python

      Продолжительность времени с timedelta

      timedelta — это класс с помощью которого можно установить не дату, как в примерах выше, а продолжительность. Так мы создадим объект с 12 днями и 33 секундами:

      duration_time = datetime.timedelta(days = 12, seconds = 33) print(duration_time, type(duration_time))

      Продолжительность с timedelta в Python datetime

      Все атрибуты, которые мы можем указывать для этого класса:

      • days
      • seconds
      • microseconds
      • milliseconds
      • minutes
      • hours

      Кроме этого мы можем преобразовывать эти объекты в секунды:

      duration_time = datetime.timedelta(minutes = 1, seconds = 10) # Преобразуем в секунды seconds = duration_time.total_seconds() print(seconds, type(seconds))

      Получение секунд в datetime Python

      Разница между датами

      Мы можем искать разницу между датами получая объект timedelta:

      date_now = datetime.datetime.now() date_tomorrow = datetime.datetime(2019, 12, 29) # Вычисляем разницу между датами difference = date_tomorrow - date_now print(difference, type(difference)) print('Разница только в днях: ', difference.days)

      Разница между датами в Python datetime

      Изменение объектов

      Каждый их объектов выше можно изменить. Так мы изменим объект timedelta прибавив часы к минутам:

      duration_hours = datetime.timedelta(hours = 1) duration_minutes = datetime.timedelta(minutes = 10) result = duration_hours + duration_minutes print(result, type(result))

      Изменение времени в Python datetime

      С помощью timedelta изменяется и дата. Пример ниже изменяет текущую дату прибавляя к ней 1 день и 1 час:

      date_now = datetime.datetime.now() duration_minutes = datetime.timedelta(days=1, minutes=10) result = date_now + duration_minutes print(result, type(result))

      Добавление дней в Python datetime

      Сравнение и условия

      Каких либо хитростей в сравнении объектов нет. В следующем примере идет сравнение двух дат с разницей в день:

      date_one = datetime.datetime(2017,12,1) date_two = datetime.datetime(2017,12,2) if date_two > date_one: print(' больше чем '.format(date_two, date_one))

      Сравнение объектов datetime в Python

      При этом стоит проверять, что объекты относятся к классу datetime, а не являются строками. В следующем примере мы сравниваем года, но они уже относятся к численным:

      date_one = datetime.datetime(2017,12,1) date_two = datetime.datetime(2017,12,2) if date_two.year == date_one.year: print('Год одинаковый. Тип данных: ', type(date_two.year))

      Сравнение годов в Python datetime

      Объект timedelta тоже можно сравнивать:

      time_one = datetime.timedelta(seconds=2) time_two = datetime.timedelta(minutes=1) if time_one < time_two: print('Pass')

      Сравнение timedelta в Python datetime

      Работа с метками (штампами) timestamp

      При работе с API или в Unix системах мы можем увидеть отображение времени в таком формате:

      1578238360

      Данные числа обозначают количество секунд с 1 января 1970 года. Мы можем конвертировать данное число в понятный формат используя datetime:

      timestamp = date.fromtimestamp(1578238360) print(timestamp)

      Работа с UNIX timestamp Python datetime

      Так же сработает если мы хотим получить и время:

      timestamp = datetime.fromtimestamp(1578238360) print(timestamp)

      Получение даты и времени из timestamp в Python datetime

      Для конвертирования в timestamp используется метод с аналогичным названием:

      from datetime import datetime date_now = datetime.now() print(date_now.timestamp)

      Создание timestamp в Python datetime

      Работа с часовыми поясами

      К сожалению у меня нет большого опыта работы с часовыми поясами и примеры ниже не стоит рассматривать как лучшие практики.

      Библиотека datetime не хранит часовые пояса, данные о переводах часов (летнее и зимнее время) и високосных секундах. К тому же, некоторые страны, могут изменить время опираясь на локальные ситуации. Эти ситуации опасны, когда идет запись в базу данных. Для вывода в GUI, можно использовать datetime.datetime.now() или высчитывать часовой пояс из базы.

      Для записи в базу данных мы можем использовать время UTC и отдельно считать часовой пояс:

      utc = datetime.datetime.utcnow() print(utc)

      Время UTC в Python Datetime

      Следующий пример вычислит разницу времени между UTC и локальным. Насколько я знаю он может не сработать на версиях Python < 3.3:

      gmt = datetime.today() - datetime.utcnow() print(gmt)

      Разница во времени UTC Python datetime

      Для вычисления других часовых поясов можно использовать стороннюю библиотеку pytz, которая их хранит:

      pip install pytz

      Вывести все часовые пояса мы можем так:

      import pytz for tz in pytz.all_timezones: print(tz)

      Вывод всех часовых поясов в Python pytz

      На примере ниже я перевожу локальное время в часовой пояс Киева:

      import pytz from datetime import datetime tz_kiev = pytz.timezone('Europe/Kiev') time_kiev = datetime.now(tz_kiev) print(time_kiev)

      DateTime SQL: работа с датой и временем в базе данных

      Datetime в SQL представляет собой тип данных, который используется для хранения и работы с датами и временем. В этом ответе я расскажу более подробно о datetime в SQL, и приведу примеры использования этого типа данных с кодом.

      Datetime в SQL поддерживает хранение информации о дате и времени в разных форматах, включая год, месяц, день, часы, минуты и секунды. Это позволяет разработчикам легко выполнять операции, связанные с датой и временем, в своих приложениях.

      Пример использования datetime в SQL:

      CREATE TABLE orders ( order_id INT PRIMARY KEY, order_date DATETIME );

      В этом примере мы создаем таблицу "orders" с полем "order_date", которое имеет тип данных DATETIME.

      INSERT INTO orders (order_id, order_date) VALUES (1, '2021-10-15 13:30:00');

      Этот запрос вставляет новую запись в таблицу "orders" с указанием значения "order_date" в формате "год-месяц-день часы:минуты:секунды".

      SELECT * FROM orders WHERE order_date >= '2021-01-01';

      Этот запрос выбирает все записи из таблицы "orders", где значение "order_date" больше или равно '2021-01-01'.

      UPDATE orders SET order_date = '2022-01-01 10:00:00' WHERE order_id = 1;

      Этот запрос обновляет значение поля "order_date" для записи с "order_id" равным 1 на новое значение '2022-01-01 10:00:00'.

      DELETE FROM orders WHERE order_date < '2021-01-01';

      Этот запрос удаляет все записи из таблицы "orders", где значение "order_date" меньше '2021-01-01'.

      Datetime также поддерживает различные функции, которые позволяют выполнять операции и манипулировать данными с датами и временем. Например, функция NOW() возвращает текущую дату и время, а функция DATEADD() позволяет добавлять или вычитать определенное количество времени к дате.

      Вот примеры использования функций datetime:

      SELECT NOW();

      Этот запрос возвращает текущую дату и время.

      SELECT DATEADD(HOUR, 2, '2021-10-15 13:30:00');

      Этот запрос добавляет 2 часа к указанному значению даты и времени.

      В заключение, datetime в SQL предоставляет удобные средства для работы с датами и временем. Вы можете создавать таблицы с полями datetime, вставлять и обновлять данные, выбирать записи и использовать функции для выполнения различных операций с датами и временем.

      8 способов — как посчитать возраст в Excel по дате рождения.

      В Excel нет специальной функции, чтобы посчитать возраст, однако существует несколько различных способов его определения на основе даты рождения. Вы узнаете несколько приемов, как рассчитать его в количестве полных лет, в годах, месяцах и днях на текущий момент или на какой-то определённый момент времени. Мы объясним преимущества и недостатки каждого способа, покажем, как создать идеальную формулу расчета возраста в Экселе и настроить ее для решения некоторых конкретных задач.

      В повседневной жизни вопрос «Сколько вам лет?» обычно подразумевает ответ, указывающий, сколько лет вы прожили. В Microsoft Excel вы можете создать формулу для исчисления точной продолжительности жизни в месяцах, днях, часах и даже минутах. Но давайте не будем нарушать традицию и научимся сначала считать по полным годам.

      Основная формула расчета Excel для возраста в годах.

      Как вы обычно определяете, сколько вам лет? Просто вычитая дату рождения из текущей. Этот традиционный подход, знакомый нам еще с детства, может также использоваться в Excel.

      Если предположить, что день рождения (ДР) записан в ячейке B2, то вычислить возраст в годах можно следующим образом:

      Первая часть выражения (СЕГОДНЯ()-B2) возвращает разницу между текущей и датой рождения в днях. А затем вы делите это на 365, чтобы получить количество лет.

      Формула очевидна и легко запоминаема, однако есть небольшая проблема. В большинстве случаев мы получаем число, как показано на скриншоте ниже. Что, согласитесь, несколько непривычно и не слишком удобно.

      Основная формула Excel расчета для возраста в годах

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

      Основная формула Excel расчета для количества лет

      Функция ЦЕЛОЕ округляет в меньшую сторону до ближайшего целого.

      Округляет количество прожитых лет по стандартным правилам в зависимости от значения дробной части (более 0,5 — в большую сторону) при помощи ОКРУГЛВНИЗ.

      Округляет в меньшую сторону.

      Отбрасывает дробную часть, оставляя только целое.

      Во всех случаях ноль в формуле означает, что в возвращаемой цифре не должно быть ни одного десятичного разряда.

      Недостатки: использование этого выражения в Экселе дает довольно точные результаты, но не безупречные. Деление на среднее число дней в году в большинстве случаев работает нормально, но иногда все же показывает неверный возраст. Например, если кто-то родился 29 февраля, а сейчас 28 февраля, программа сделает человека на один день старше.

      В качестве альтернативы вы можете использовать в знаменателе 365,25 вместо 365, поскольку каждый четвертый год состоит из 366 дней. Однако и этот подход не идеален. Например, если вы рассчитываете возраст ребенка, который еще не прожил високосный год, деление на 365,25 дает неправильный результат.

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

      Далее мы поговорим о нескольких специальных функциях, которые безошибочно вычисляют возраст независимо от года.

      Как определить возраст с функцией ДОЛЯГОДА.

      Более надежный способ расчета, чем те, о которых мы говорили ранее, - это использование функции ДОЛЯГОДА (YEARFRAC в английском варианте), которая возвращает часть года, то есть количество целых дней между двумя датами.

      Синтаксис здесь следующий:

      YEARFRAC (дата_начала, дата_окончания, [базис])

      Первые два аргумента очевидны и вряд ли требуют какого-либо дополнительного объяснения. А вот Базис — это аргумент, который определяет основу для подсчета дней.

      Чтобы составить абсолютно точную формулу, передайте в ДОЛЯГОДА следующие значения:

      • Дата_начала - дата рождения.
      • Дата_окончания - функция СЕГОДНЯ() для использования текущего момента времени.
      • Базис - используйте 1, которая предписывает Excel делить фактическое количество дней в месяце на фактическое количество дней в году. Никаких усредненных цифр типа 360 или 365 здесь не используется.

      Учитывая вышеизложенное, формула Excel для расчета возраста по дате рождения выглядит следующим образом:

      Предполагая, что ДР вписан в ячейку B2, выражение принимает следующий вид:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *