PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

strftime в sqlite конвертиране в postgres

Този SQLite:

date(date, '-' || strftime('%w', date) || ' days')

Е, AFAIK, изваждане на броя дни от деня в седмицата (т.е. 0 за неделя, 1 за понеделник, ...) от date и след това преобразуване на резултата обратно в дата; вижте референция за функцията за дата за подробности.

Мисля, че еквивалентът за PostgreSQL би бил:

d - extract(dow from d)::int

където d е вашата дата; изваждането на цяло число от дата изважда този брой дни. Ако d е клеймо за време, тогава може да се наложи да добавите малко кастинг. Има date_trunc('week ', 'd') също, но това започва да брои дните от понеделник, така че ще се разминете с един с това.

Ето кратка разбивка на SQLite с дата променлива, заменена с d за да избегнете объркване с date() функция:

date(d, '-' || strftime('%w', d) || ' days')

Първо, || е стандартният оператор за конкатенация на SQL низове. strftime функция е инструмент за форматиране на дата и час с общо предназначение, който идва от POSIX ; %w спецификатор на формат означава "ден от седмицата като число, като неделя е ден нула"; така че strftime call ви дава 0 за неделя, 1 за понеделник и така нататък до 6 за събота. Ако d е вторник, тогава strftime call ще даде 2 и всичко завършва като:

date(d, '-2 days')

Модификаторите за SQLite date функция имат различни форми, но '-2 дни' означава точно това, което бихте си помислили:извадете два дни от d . Общият резултат е, че получавате d съкратен до седмицата (където неделя се счита за първи ден от седмицата).

От страна на PostgreSQL:

d - extract(dow from d)::int

можем да започнем с extract ; екстракт се използва за извличане на конкретни части от дата или час и dow означава "ден от седмицата като число, като неделя е ден нула". Звучи ли ви познато? След това ::int превръща числото DOW в цяло число и е необходимо, защото DOW всъщност излиза като стойност с двойна точност и няма дефиниран оператор за изваждане на двойно от дата в PostgreSQL; прехвърлянето може също да бъде написано в стандартната форма като cast(x като int) . Когато извадите цяло число от дата в PostgreSQL, изваждате толкова дни; можете да бъдете по-ясни, като кажете неща като - интервал '3 дни' но това просто би добавило повече шум в този случай, така че избрах простотата. Ако е вторник, тогава нашата версия на PostgreSQL изглежда така:

d - 2

и това е същото като:

d - interval '2 days'

И след изваждането ще се върнем в неделя. Има също date_trunc в PostgreSQL, но това ще бъде съкратено до понеделник, а не до неделя.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Типове данни на PostgreSQL и C#

  2. Грешка при запис на Dataframe от R към Redshift

  3. PostgreSQL деление на нула при поръчка

  4. Как мога да маркирам таблица само за четене?

  5. Превеждане на заявка от Firebird към PostgreSQL