我在我的 raspberrypi 上运行 firebird 2.5 superclassic。我执行以下查询并出现以下错误:
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')
出现这个错误:
Specified EXTRACT part does not exist in input datatype
SQL 错误代码=~105。
我知道问题出在 extract(week from 'Now')
上,因为当我用数字手动替换它时,我确实得到了一些结果。
知道问题出在哪里,或者您有其他选择吗?
最佳答案
问题是 extract
接受任何数据类型,但只适用于类型 date
、time
或 timestamp
。在此上下文中,'Now'
只是一个 char(3)
,因此无法使用 extract(它无法从 char
中提取数据> 类型)。
混淆源于以下事实:在某些情况下(例如,赋值或显式转换为 date
、time
或 timestamp
),'Now'
将产生当前日期/时间。它在这种情况下不起作用,因为 Firebird 不知道它需要三种类型中的哪一种;理论上 extract
接受任何类型,它实际能做什么取决于它接收的类型。
您需要明确地将其强制转换为日期
(或时间戳
):
使用显式转换:
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)
关于sql - 提取(从 'Now' 开始的一周)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44196772/