私は非常にpostgresで新しく、私はここに投稿する前に約1時間これを検索してきました。Postgres:タイムスタンプ上の特定の日付のクエリは、私のpostgresクライアントのデータを見ることができる間にデータを返しません。
うまくいけば、これはおそらく些細な問題で私を助けることができます。
私は時間のために、すべてのデータを取得するために照会するCREATE TABLE LTC (
id SERIAL PRIMARY KEY,
time timestamptz,
side CHAR(4),
price REAL,
v REAL,
n INT
);
=「2017-08-12T03:58:26.563Z」(ISO文字列
私は、このスキーマで作成されたデータベースLTC
を持っていますjavascriptから)。私はその時間にデータベースに100行以上のデータがあることを知っています。私はpostgresクライアントでそれを見ています。ここで
は、私は、クエリやってるさ:
select * from LTC where time = '2017-08-12T03:58:26.563Z'::timestamptz
なぜ私は結果を取得していないのですか?
編集は:
それでもわからないなぜそれが働いていなかったが、私は書いた回避策を行います。JavaScriptで
:
var date = new Date('2017-08-12T03:58:26.563Z').toISOString(); // actual time passed as parameter in my function, hard-coded for the example
var reg = new RegExp("([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})\.[0-9]*Z","gmi");
var start = date.replace(reg, function(match,year,month,day,hour,min,sec,ms) {
return year+'-'+month+'-'+day+'T'+hour+':'+min+':00.000Z';
});
var end = date.replace(reg, function(match,year,month,day,hour,min,sec,ms) {
var min = parseInt(min)+1;
if (min<=9) {
min = '0'+min;
}
return year+'-'+month+'-'+day+'T'+hour+':'+min+':00.000Z';
});
var query = "select * from LTC where time >= '"+start+"'::timestamptz and time < '"+end+"'::timestamptz"; // This works
なぜそれが動作していないのか分かりませんが、私はあなたのレンジソリューションを試してみました。私は、クエリを生成するためにJSコードを投稿しました。 –
それは痛いJSスクリプトです!必要なものが分かりやすい場合は、代わりにこれをDB側のロジックとして試してみてください。 'select * LTC からdate_trunc( 'minute'、time :: timestamp)= date_trunc( 'minute'、 ' 2017-08-12T03:58:26.563Z ':: timestamp); '。 'timestamp'にキャストすると、タイムゾーンを明示的に渡していない場合に、' timestamptz'を使って自動変換の問題を解決しているようです。 – cole