SQL Server 我可以在like语句中使用YEAR(CURDATE())吗?

eqoofvh9  于 2022-11-28  发布在  其他
关注(0)|答案(2)|浏览(356)

在SQL指令码中,我尝试根据字串值字段中的年份取得数据。每年数据表都会为目前的年份新增一列。因此,ID_TYPE_NAME数据行的数据列具有:
“MS-DRG V38(2021财年)”“MS-DRG V39(2022财年)”等等......
作为SQL的新手,我希望下面这样的公式能起作用:

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

但我收到一条信息
CURDATE不是可识别的内置函数名
我可以使用like吗?或者我需要走不同的路线吗?如果我必须走不同的路线,我使用什么方法来实现这一点?

qgelzfjb

qgelzfjb1#

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)) + ')'

Demo

rjee0c15

rjee0c152#

我们可以使用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)
试用:db<>fiddle

相关问题