Google Sheets中d.m.yyyy格式文本日期转日期及Query公式比较问题
解决Google Sheets Query中d.m.yyyy格式日期的范围匹配问题
核心问题原因
Google Sheets的QUERY函数仅识别yyyy-MM-dd格式的日期(或标准日期对象),而你使用的d.m.yyyy是纯文本格式,直接拼接后无法被Query解析为日期进行范围比较。
解决方案1:直接在Query语句中转换文本日期(无需辅助列)
将Col2的文本日期和条件单元格(A2、B2)的文本日期,都通过date()函数转换为Query可识别的日期类型,再进行比较。公式如下:
=query(A4:B, "select Col1 where date(right(Col2,4), mid(Col2, find('.', Col2)+1, find('.', Col2, find('.', Col2)+1)-find('.', Col2)-1), left(Col2, find('.', Col2)-1)) >= date('"&RIGHT($A2,4)&"','"&MID($A2,FIND(".",$A2)+1,FIND(".",$A2,FIND(".",$A2)+1)-FIND(".",$A2)-1)&"','"&LEFT($A2,FIND(".",$A2)-1)&"') and date(right(Col2,4), mid(Col2, find('.', Col2)+1, find('.', Col2, find('.', Col2)+1)-find('.', Col2)-1), left(Col2, find('.', Col2)-1)) <= date('"&RIGHT($B2,4)&"','"&MID($B2,FIND(".",$B2)+1,FIND(".",$B2,FIND(".",$B2)+1)-FIND(".",$B2)-1)&"','"&LEFT($B2,FIND(".",$B2)-1)&"')")
公式逻辑说明:
- 通过
right(Col2,4)提取年份,mid(...)提取月份,left(...)提取日期,传入date()函数将文本转为Query可识别的日期对象。 - 对条件单元格A2、B2执行相同的提取转换操作,确保两边都是标准日期类型后再做范围比较。
解决方案2:先预处理转换日期列(更易维护)
- 添加辅助列(比如C列),将B列的
d.m.yyyy文本转成Google Sheets标准日期:=DATE(RIGHT(B4,4), MID(B4,FIND(".",B4)+1,FIND(".",B4,FIND(".",B4)+1)-FIND(".",B4)-1), LEFT(B4,FIND(".",B4)-1)) - 同时将A2、B2的文本日期也用上述公式转成标准日期(替换B4为A2/B2)。
- 使用简化后的Query公式查询:
=query(A4:C, "select Col1 where Col3 >= date '"&TEXT($A2,"yyyy-MM-dd")&"' and Col3 <= date '"&TEXT($B2,"yyyy-MM-dd")&"'")
内容的提问来源于stack exchange,提问作者Jelena Popovic
相关产品推荐
相关产品推荐

