如何在两个不同的日期列中选择月份?我的原始表就像
id occured_at expire_at
1 2017-03-17 10:21:22.935278 2017-04-17 10:21:22.935278
2 2017-04-24 10:21:22.93851
3 2017-04-27 10:21:22.941801 2017-05-77 10:21:22.941801
4 2017-09-17 10:21:22.941801 2017-10-17 10:21:22.941801
我希望在2017-04中选择occured_at
或expire_at
,并将日期截断为年份和月份,结果就像
id occured_at expire_at
1 2017-03 2017-04
2 2017-04
3 2017-04 2017-05
我是sql的新手。如果有人能提供帮助,我们将不胜感激。
答案 0 :(得分:1)
要显示您想要的日期,请使用#!/bin/bash
spinner () {
local SP_WIDTH="${3:-1.1}"
local SP_DELAY="${4:-.2}"
local SP_STRING=${2:-'/-\|'}
local SP_COLOR=0
tput civis
while [ -d /proc/$1 ]; do
printf "\e[38;5;$((RANDOM%257))m %${SP_WIDTH}s\r\e[0m" "$SP_STRING"
sleep $SP_DELAY
SP_STRING=${SP_STRING#"${SP_STRING%?}"}${SP_STRING%?}
done
tput cnorm
}
sleep 7 &
spinner "$!"
。您可以使用几种不同方式限制行数:
使用date_trunc:
to_char()
或者您可以使用比较格式化的字符串:
select id,
to_char(occurred_at, 'yyyy-mm') as occurred_at,
to_char(expire_at, 'yyyy-mm') as expire_at
from the_table
where date_trunc('month', occured_at) = date '2017-04-01'
or date_trunc('month', expire_at) = date '2017-04-01';
或者您可以使用范围查询:
select id,
to_char(occurred_at, 'yyyy-mm') as occurred_at,
to_char(expire_at, 'yyyy-mm') as expire_at
from the_table
where to_char(occured_at, 'yyyy-mm') = '2017-04'
or to_char(expire_at, 'yyyy-mm') = '2017-04';
最后一个查询能够在这些列上使用索引。对于前两个查询,您需要在使用的表达式上定义表达式索引。