当日期是varchar2 dd/mm/yyyy时,应该如何选择日期范围?当我使用:
SELECT * FROM invoice WHERE data_doc >= '01/07/2020' AND data_doc <= '19/07/2020'
返回数据文档所在的值,即=02/03/2020
wfsdck301#
比较字符串时( varchar2 在本例中,您可以按字典顺序对它们进行比较。一种方法是将这些字符串转换为实际日期:
varchar2
SELECT * FROM invoice WHERE TO_DATE(data_doc, 'DD/MM/YYYY') >= TO_DATE('01/07/2020', 'DD/MM/YYYY') AND TO_DATE(data_doc, 'DD/MM/YYYY') <= TO_DATE('19/07/2020', 'DD/MM/YYYY')
ercv8c1e2#
到处使用最新转换
SELECT * FROM invoice WHERE TO_DATE(data_doc,'DD/MM/YYYY') >= TO_DATE('01/07/2020','DD/MM/YYYY') AND TO_DATE(data_doc,'DD/MM/YYYY') <= TO_DATE('19/07/2020','DD/MM/YYYY')
li9yvcax3#
您(唉)需要将列转换为日期。然后可以直接对日期进行比较:
WHERE TO_DATE(data_doc, 'DD/MM/YYYY') >= DATE '2020-07-01' AND TO_DATE(date_doc, 'DD/MM/YYYY') <= DATE '2020-07-17'
为了提高性能,oracle支持表达式上的索引。因此,可以在上创建索引 TO_DATE(data_doc, 'DD/MM/YYYY') .也就是说,您应该修复数据模型,以便将日期正确地存储为日期。因为您是在同一个月内比较日期——而且仅出于这个原因——您可以通过要求数据在同一个月内来调整比较:
TO_DATE(data_doc, 'DD/MM/YYYY')
WHERE data_doc >= '01/07/2020' AND data_doc <= '19/07/2020' AND data_doc LIKE '__/07/2020'
不过,我强烈建议您修复数据类型。
3条答案
按热度按时间wfsdck301#
比较字符串时(
varchar2
在本例中,您可以按字典顺序对它们进行比较。一种方法是将这些字符串转换为实际日期:ercv8c1e2#
到处使用最新转换
li9yvcax3#
您(唉)需要将列转换为日期。然后可以直接对日期进行比较:
为了提高性能,oracle支持表达式上的索引。因此,可以在上创建索引
TO_DATE(data_doc, 'DD/MM/YYYY')
.也就是说,您应该修复数据模型,以便将日期正确地存储为日期。
因为您是在同一个月内比较日期——而且仅出于这个原因——您可以通过要求数据在同一个月内来调整比较:
不过,我强烈建议您修复数据类型。