我不知道如何正确命名这种语法。我得到了一个表格(比如说T),列A
,其中的条目以格式USER-YYYY-MMDD
存储。我想提取A
列的年份(YYYY
部分)大于2010的所有行。例如
TABLE T
+----------------+
| A |
+----------------+
| USER-2011-1234*|
| USER-1992-1923 |
| USER-2014-1234*|
+----------------+
(*)是我想要的:YYYY
部分大于2010. SQL应该是这样的,但我不知道如何在PostgreSQL中说出来。
SELECT * FROM T WHERE A[5-8] > 2010
谢谢!
答案 0 :(得分:3)
select *
from t
where to_number(substr(a, 6, 4)) > 2010;
请注意,如果字符串无法转换为数字
,则会失败并显示错误手册中的更多详细信息:http://www.postgresql.org/docs/current/static/functions-string.html
顺便说一下:在一列中存储多个信息是一个糟糕的设计。您应该将用户名和日期存储在两个不同的列中。另外将日期存储为varchar也是一个非常糟糕的主意。日期应存储为date
,而不是varchar
答案 1 :(得分:2)
尝试这样
select *
from t
where substring(a::text from 6 for 4)::integer > 2010;