postgresql – SUBSTR不适用于Postgres 8.3中的数据类型“timest
发布时间:2020-12-13 16:33:56 所属栏目:百科 来源:网络整理
导读:我在postgres中遇到了下面的查询问题 SELECT u.username,l.description,l.ip,SUBSTRING(l.createdate,11) as createdate,l.actionFROM n_logs AS l LEFT JOIN n_users AS u ON u.id = l.useridWHERE SUBSTRING(l.createdate,11) = '2009-06-07' AND SUBSTRIN
我在postgres中遇到了下面的查询问题
SELECT u.username,l.description,l.ip,SUBSTRING(l.createdate,11) as createdate,l.action FROM n_logs AS l LEFT JOIN n_users AS u ON u.id = l.userid WHERE SUBSTRING(l.createdate,11) >= '2009-06-07' AND SUBSTRING(l.createdate,11) <= '2009-07-07'; 我总是在较旧版本的postgres中使用上述查询,并且它的工作率为100%.现在有了posgres的新版本,它给了我下面的错误 **ERROR: function pg_catalog.substring(timestamp without time zone,integer,integer) does not exist LINE 1: SELECT u.username,... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.** 我假设它与数据类型有关,数据是一个时区,而substring只支持字符串数据类型,现在我的问题是我可以对我的查询做些什么,以便我的结果出现?
您的问题的显式解决方案是将日期时间转换为字符串.
…,SUBSTRING(l.createdate :: VARCHAR,… 现在,使用结果比较日期并不是一个好习惯. 因此,您需要的最佳解决方案是使用显式的datetime manipulation,comparison和formatting函数更改查询,例如extract()和to_char() 你必须改变你的查询才能有一个像这样的子句 l.createdate::DATE >= '2009-06-07'::DATE AND l.createdate::DATE < '2009-07-08'::DATE; 或者下面的替代方案之一(你应该接受而不是这个.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |