我可以在类似语句中使用YEAR(CURDATE())吗?



在SQL脚本中,我试图根据字符串值字段内的年份获取数据。该表每年为当前年份添加新行。ID_TYPE_NAME列有一行

MS-DRG V38 (fy2021)"MS-DRG V39 (fy2022)"等等…

作为SQL的新手,我希望下面的公式能起作用:

WHERE   ID_TYPE_NAME LIKE 'MS-DRG%'
and ID_TYPE_NAME LIKE YEAR(CURDATE())

但是我得到一个消息

CURDATE不是可识别的内置函数名

我可以使用like还是我需要走不同的路线?如果我必须走不同的路线,我用什么方法来完成这一点?

关于LIKE参数没有什么神奇的,它只是一个普通的字符串,其中某些字符(即%_)被处理为通配符。您关于CURDATE未被识别为内置函数的错误是因为您调用了一个不存在的函数,就像您运行select pink_elephants()一样。

要用适合您需要的模式组合字符串,您可以使用以下工具:

  • CURRENT_TIMESTAMP获取当前日期和时间(这是标准SQL的一个特性,在许多方言中都可用)
  • YEAR()提取年份部分
  • CAST()将年份(整数)转换为文本
  • +用于连接子字符串

一起:

where id_type_name like 'MS-DRG% (FY ' + cast(year(current_timestamp) as varchar(4)) + ')'

演示

我们可以使用CONCAT来构建应该找到的字符串,如下所示:

SELECT ID_TYPE_NAME
FROM yourtable
WHERE ID_TYPE_NAME 
LIKE CONCAT('MS-DRG%',YEAR(GETDATE()),')');

YEAR只取当前日期中的一年。

所以LIKE条件将被创建为:MS-DRG%2022)

或者我们可以更具体地这样做:

SELECT ID_TYPE_NAME
FROM yourtable
WHERE ID_TYPE_NAME 
LIKE CONCAT('MS-DRG%FY ',YEAR(GETDATE()),')');

这个查询的LIKE条件将被创建为:MS-DRG%FY 2022)

这两个查询将只返回示例数据的结果:MS-DRG V39 (FY 2022)

Try out: db<>fiddle

相关内容

  • 没有找到相关文章

最新更新