postgresql - 错误:类型时间戳的无效输入语法:
问题描述
我的 PostgreSQL 查询中出现错误,错误:类型时间戳的输入语法无效:
我正在使用\set
.
\set dueDateEarliest '2018-04-01'
\set dueDateLatest '2018-08-01'
\set dueDateLatest '2018-08-01'
并尝试在我的查询中使用这些值,如下所示
SELECT DISTINCT(bu.id) as "user_id",c.organization_name as "name",round(i.balance,2) as "amount_due",i.id as "invoice_number",i.due_date as "due_date",CONCAT('collectionMonth', LPAD(cf2.content,2,'0')) as "collection_date" FROM base_user bu,contact c,contact_field cf, invoice i, contact_field cf2 WHERE bu.id = c.user_id AND bu.deleted = 0 AND cf.contact_id = c.id AND cf.type_id = 7 AND cf.content = 'DD' AND i.user_id = bu.id AND i.balance > 0 AND i.is_review != 1 AND i.deleted != 1 AND due_date BETWEEN 'dueDateEarliest' AND 'dueDateLatest' AND cf2.contact_id = c.id AND cf2.type_id = 8 ORDER BY bu.id limit 20;
这给出了错误错误:类型时间戳的无效输入语法:
我没有办法解决它。而且我设置价值的方式\set
很好吗?或者我应该SET
用来设置值。因为实际上当我必须从 shell 脚本运行这些命令时,我将从 shell 脚本调用/设置为
`set dueDateEarliest '$dueDateEarliest'`。
哪个是最好的方法?
解决方案
这是您如何格式化查询的问题。让我们稍微简化一下:
# \set dueDateEarliest '2018-04-01'
# select 'dueDateEarliest'::timestamp;
ERROR: invalid input syntax for type timestamp: "dueDateEarliest"
LINE 1: select 'dueDateEarliest'::timestamp;
它不起作用,因为它试图使用字符串“dueDateEarliest”,而不是变量。
这是正确的方法:
# select :'dueDateEarliest'::timestamp;
timestamp
---------------------
2018-04-01 00:00:00
(1 row)
推荐阅读
- google-cloud-platform - Google 存储权限访问被拒绝
- python - 在 Atom 中运行 Python 并接受用户输入
- laravel - SQLSTATE[42S22]:在 Laravel 中找不到列
- r - 使用 mtext 函数时的 'pos' 等效项
- angular - 仅从 Observable 获取最新值
- python - Selenium python 故障查找元素
- r - 错误:`data` 必须是数据框,或其他可被`fortify()`强制的对象,而不是 S3 对象
- google-cloud-firestore - 在 Android 的 Firebase Firestore 中创建一个复杂的查询
- javascript - Safari:TypeError:代理的“目标”应该是一个对象
- twilio - 使用消息服务通过 MMS 发送 Twilio