如何在 postgresql 版本 12 中实现 LIKE 条件?
How to implement LIKE condition in postgresql version 12?
Select COUNT(*) from Table_one where timestamp LIKE '%2020-03-04%' AND speed_type = 'SPEED';
当我通过 spring 引导框架实现该查询时,该查询显示错误,因此我在 postgresql 上检查了它,但它仍然显示错误。
错误是这样的:-
ERROR: operator does not exist: date ~~ unknown
LINE 1: Select COUNT(*) from table_one where timestamp LIKE '2020-0...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 49
您需要将 timestamp
列转换为 VARCHAR
以便将其与字符串进行比较:
Select COUNT(*)
from Table_one
where CAST(timestamp AS VARCHAR) LIKE '%2020-03-04%'
AND speed_type = 'SPEED';
因为您要将时间戳值与字符串类型值进行比较。因此,需要进行转换,例如
timestamp::text LIKE '%2020-03-04%'
使用date/time函数!不要转换为字符串!
where timestamp >= '2020-03-04' AND
timestamp < '2020-03-05' AND
speed_type = 'SPEED'
这不仅可以防止不必要的类型转换。但它也不受任何可能影响到字符串转换的国际化设置的影响(这可能取决于数据库)。
它也可以使用适当的索引,包括timestamp
。并且优化器有更好的信息,可以改进查询计划(尽管本例中的计划很简单)。
Select COUNT(*) from Table_one where timestamp LIKE '%2020-03-04%' AND speed_type = 'SPEED';
当我通过 spring 引导框架实现该查询时,该查询显示错误,因此我在 postgresql 上检查了它,但它仍然显示错误。
错误是这样的:-
ERROR: operator does not exist: date ~~ unknown
LINE 1: Select COUNT(*) from table_one where timestamp LIKE '2020-0...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 49
您需要将 timestamp
列转换为 VARCHAR
以便将其与字符串进行比较:
Select COUNT(*)
from Table_one
where CAST(timestamp AS VARCHAR) LIKE '%2020-03-04%'
AND speed_type = 'SPEED';
因为您要将时间戳值与字符串类型值进行比较。因此,需要进行转换,例如
timestamp::text LIKE '%2020-03-04%'
使用date/time函数!不要转换为字符串!
where timestamp >= '2020-03-04' AND
timestamp < '2020-03-05' AND
speed_type = 'SPEED'
这不仅可以防止不必要的类型转换。但它也不受任何可能影响到字符串转换的国际化设置的影响(这可能取决于数据库)。
它也可以使用适当的索引,包括timestamp
。并且优化器有更好的信息,可以改进查询计划(尽管本例中的计划很简单)。