我遇到了一個需要轉換爲postgres語法的sqlite函數。這是date(date, '-'||strftime('%w',date)||' days')
。sqlite中的strftime轉換爲postgres
任何人都可以幫助我將此sqlite段轉換爲postgres?
我遇到了一個需要轉換爲postgres語法的sqlite函數。這是date(date, '-'||strftime('%w',date)||' days')
。sqlite中的strftime轉換爲postgres
任何人都可以幫助我將此sqlite段轉換爲postgres?
這SQLite的:
date(date, '-' || strftime('%w', date) || ' days')
是,據我所知,減去一天在星期幾的天數(即0表示星期日,1表示星期一,...),然後將結果轉換爲date
;詳情請參閱date function reference。
我認爲相當於對PostgreSQL是:
d - extract(dow from d)::int
其中d
是你的日期;從日期中減去整數減去該天數。如果d
是時間戳,那麼您可能需要添加一些強制轉換。還有date_trunc('week', 'd')
,但是從星期一開始計算日期,所以你會選擇一個。
下面是與date
變量通過d
更換,以避免與date()
功能混亂的SQLite的快速崩潰:
date(d, '-' || strftime('%w', d) || ' days')
首先,||
是標準的SQL字符串連接運算符。 strftime
function是來自POSIX的通用日期和時間格式化程序; %w
格式說明符表示「星期幾爲週日爲零的數字」;所以strftime
電話會在星期日爲您提供0,星期一爲1,星期六爲您提供6。如果d
是星期二,那麼strftime
通話將產生2和整件事結束了:
date(d, '-2 days')
指定SQLite date
function修飾符有不同的形式,但'-2 days'
意味着正是你會認爲:減2天從d
。總體結果是,您得到d
被截斷爲一週(週日被認爲是一週的第一天)。
在PostgreSQL的一面:
d - extract(dow from d)::int
我們可以extract
啓動; extract
用於提取日期或時間的特定部分,而dow
表示「星期幾爲週日爲零的數字」。聽起來有點熟?然後,::int
將DOW編號轉換爲整數,因爲DOW實際上是作爲雙精度值出現的,並且在PostgreSQL中沒有爲從日期中減去雙精度值而定義的運算符;演員還可以用標準格式寫成cast(x as int)
。當你從PostgreSQL的日期中減去一個整數時,你會減去那麼多天;你可以通過說- interval '3 days'
之類的東西來更加明確,但這樣會增加更多的噪音,所以我選擇了簡單。如果是星期二,那麼我們的PostgreSQL的版本是這樣的:
d - 2
,這就是一樣:
d - interval '2 days'
和減法後,我們會在週日回來的。 PostgreSQL中也有date_trunc
,但是會截斷到週一和週日。
%w是一週中的一天,從星期日= 0,同PostgreSQL的DOW一個數字:SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
從http://www.postgresql.org/docs/current/static/functions-datetime.html
的字符串操作應該是非常簡單的,但我沒有關於完成的Postgres 10年。
[經過研究] 的||
運營商,我懷疑,是字符串連接,從http://www.sqlite.org/lang_expr.html
SQLite的功能是計算週日在指定日期前[安裝的SQLite和PostgreSQL後]:
sqlite> select date('now', '-'||strftime('%w','now')||' days');
2011-08-21
mu is too short了拼圖的最後一塊:
postgres=# select date 'now' - extract(dow from timestamp 'now')::int;
?column?
------------
2011-08-21
是否有替代品,您可以建議? – locoboy
考慮使用to_char
功能,例如 「3月12日18時07分22秒」 的格式,
PostgreSQL version:使用strftime
功能(與awk
幫助)
psql -c "SELECT to_char(time,'Mon DD HH24:MI:SS ') FROM mytable;"
sqlite3 'SELECT strftime("%s", time, "localtime") FROM mytable;' \
| awk '{print strftime("%b %e %H:%M:%S",$1) }'
在現有例子中,
你能帶我通過sqlite語句的邏輯,然後通過postgres的邏輯嗎?我在參考之後遇到困難。 – locoboy
@ cfarm54:我爲你增加了一些步行。 –