如何用year(getdate())替换SQL Server LIKE语句中的固定年份通配符?
解决方案
原SQL语句是固定匹配month字段以'2023'开头的记录,要替换为动态获取当前年份并拼接通配符%的形式,根据你使用的数据库不同,语法略有差异:
1. SQL Server(原语句使用getdate(),大概率为此数据库)
修改后的SQL:
Select * from table a where month like CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '%'
这里需要把YEAR(GETDATE())返回的整数转换成字符串,再和%拼接——因为LIKE操作符要求右侧为字符串类型。
2. MySQL
若使用MySQL,获取当前年份用YEAR(NOW()),字符串拼接用CONCAT函数:
Select * from table a where month like CONCAT(YEAR(NOW()), '%')
3. Oracle
Oracle中获取当前年份用EXTRACT(YEAR FROM SYSDATE),字符串拼接用||运算符:
Select * from table a where month like EXTRACT(YEAR FROM SYSDATE) || '%'
额外注意
- 请确保
month字段的格式确实是「年份+其他内容」(比如'202301'、'2023-10'这类),这样以年份开头的匹配逻辑才和原语句完全一致。 - 如果
month字段是日期类型而非字符串,更推荐直接用日期函数提取年份做等值比较,查询效率更高,比如SQL Server可写成:
Select * from table a where YEAR(month) = YEAR(GETDATE())
内容的提问来源于stack exchange,提问作者24ngusl
相关产品推荐
相关产品推荐

