我在我的树莓皮上运行了一只超级经典的火鸟2.5。我执行以下查询,它给出以下错误:
SELECT foodmanager1.F_US_FIRSTNAME,foodmanager1.F_US_LASTNAME,
foodmanager1.F_US_PICTURE_URL,
foodmanager2.F_US_FIRSTNAME, foodmanager2.F_US_LASTNAME,
foodmanager2.F_US_PICTURE_URL,
duty.F_US_FIRSTNAME, duty.F_US_LASTNAME,
duty.F_US_PICTURE_URL,
a.F_FD_DATE from
T_FOOD_DUTY a
inner join T_USER foodmanager1 on a.F_US_ID1 = foodmanager1.F_US_ID
inner join T_USER foodmanager2 on a.F_US_ID2 = foodmanager2.F_US_ID
inner join T_USER duty on a.F_US_ID3 = duty.F_US_ID
where extract(week from a.F_FD_DATE) = extract(week from 'Now')
出现此错误:
输入数据类型
中不存在指定的EXTRACT部分
SQL错误代码= ~105。
我知道问题出在extract(week from 'Now')
上,因为当我用数字手动替换它时,我会得到一些结果。
知道问题是什么,或者你有其他选择吗?
答案 0 :(得分:4)
问题是extract
接受任何数据类型,但仅适用于date
,time
或timestamp
类型。在此上下文中,'Now'
只是char(3)
,因此无法使用提取(无法从char
类型中提取数据)。
这种混淆源于这样一个事实,即在某些情境中(例如,分配或明确转换为date
,time
或timestamp
),'Now'
将产生当前日期/时间。它在这种情况下不起作用,因为Firebird无法知道它需要哪三种类型;理论上extract
接受任何类型,它实际可以做的是由它接收的类型决定。
您需要将其明确强制转换为date
(或timestamp
):
使用显式广播:
extract(week from cast('Now' as date))
使用类型导入器(又名速记):
extract(week from date'Now')
或者,正如answer of ain中所建议的那样,使用SQL标准“函数”current_date
或current_timestamp
:
extract(week from current_date)
答案 1 :(得分:3)
使用SQL标准CURRENT_TIMESTAMP
(或CURRENT_DATE
,因为时间部分在提取周时不重要)而不是'NOW'
extract(week from CURRENT_TIMESTAMP)
或者,如果您真的想使用'NOW'
,请将其投射到日期:
extract(week from CAST('Now' AS DATE))