You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在LIKE语句中使用YEAR(CURDATE())?SQL查询问题咨询

问题解决:基于字符串字段中的年份筛选数据

首先,你可以用LIKE实现需求,但原语句存在两个明显问题:

  1. CURDATE()并非所有SQL数据库都支持(比如SQL Server就不识别这个函数),需要根据你使用的数据库替换为对应函数;
  2. LIKE YEAR(CURDATE())写法错误:YEAR()返回数字类型,而LIKE需要字符串匹配,且你没加通配符,数据库无法定位要匹配的字段位置。

一、用LIKE实现的正确写法

先处理函数兼容问题:

  • MySQL/MariaDB:使用CURDATE()
  • SQL Server:使用GETDATE()
  • Oracle:使用SYSDATE
  • PostgreSQL:使用CURRENT_DATE

修正LIKE匹配逻辑

由于年份固定在(FY 2021)这类格式中,建议添加精准通配符,避免误匹配字段中其他位置的数字:

SQL Server示例:

WHERE ID_TYPE_NAME LIKE 'MS-DRG%'
  AND ID_TYPE_NAME LIKE '%FY ' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ')'

MySQL示例:

WHERE ID_TYPE_NAME LIKE 'MS-DRG%'
  AND ID_TYPE_NAME LIKE CONCAT('%FY ', YEAR(CURDATE()), ')')

二、更可靠的精准匹配方法(推荐)

直接用字符串提取函数取出字段中的年份,再与当前年份对比,比LIKE更稳定,不会因字段格式微小变化出错:

SQL Server示例:

WHERE ID_TYPE_NAME LIKE 'MS-DRG%'
  AND CAST(SUBSTRING(ID_TYPE_NAME, CHARINDEX('FY ', ID_TYPE_NAME) + 3, 4) AS INT) = YEAR(GETDATE())

逻辑:用CHARINDEX定位FY 的位置,向后偏移3位跳过"FY ",截取4个字符得到年份,转成数字后与当前年份对比。

MySQL示例:

WHERE ID_TYPE_NAME LIKE 'MS-DRG%'
  AND CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(ID_TYPE_NAME, 'FY ', -1), ')', 1) AS UNSIGNED) = YEAR(CURDATE())

逻辑:先用SUBSTRING_INDEX取出FY 之后的内容,再用一次取出)之前的内容,得到年份后转成数字对比。


内容的提问来源于stack exchange,提问作者Steven Lee Rad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:01:20