在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