如何在PostgreSQL / SQL中使用结果的子字符串

时间:2014-03-24 08:51:02

标签: sql postgresql

我不知道如何正确命名这种语法。我得到了一个表格(比如说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

谢谢!

2 个答案:

答案 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;