sql - 与 SQL 中的 IFERROR 等效的功能?

标签 sql sql-server

我有一列是大量文本的子串。

我想以YYYY的格式取出应该是年份的4个字符。

如果文本不正确,它可能有一个文本使其成为一个字符串。

我想将年份与当前年份进行比较,但由于数据类型不同,我不能这样做。

TRY_PARSE 不是内置函数。

还尝试了一些变体:

SELECT SUBSTRING(Text, 46, 4) AS Year, 
CASE WHEN CAST(SUBSTRING(Text, 46, 4) AS INT) IS NULL THEN 'Error'
WHEN CAST(Year AS INT) IS NULL < YEAR(GETDATE()) THEN 'In the past'
ELSE 'In the future'
END TEXT 
FROM TABLE


Example column:

    Year
    2011
    2018
    2022
    D200

Example output required:

Output

    'In the past'
    'In the past'
    'In the future'
    'Error'

最佳答案

认为您想要TRY_CONVERTTRY_CAST:

SELECT CASE WHEN TRY_CONVERT(int,[Text]) < YEAR(GETDATE() THEN 'In the Past'
            WHEN TRY_CONVERT(int,[Text]) = YEAR(GETDATE() THEN 'Current Year'
            WHEN TRY_CONVERT(int,[Text]) > YEAR(GETDATE() THEN 'In The Future',
            ELSE 'Error'
      END
FROM YourTable;

关于sql - 与 SQL 中的 IFERROR 等效的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57903596/

相关文章:

php - 如果我使用CodeIgniter中的函数或类来生成表来存储我的用户信息,它是否安全或可能?

sql - postgres中的嵌套选择

c# - 本地序列不能用于查询运算符的 LINQ to SQL 实现,但 Contains() 运算符除外

用于计算另一个表中用户结果的 MySQL 子查询是 sloooooooow

php - 读取和写入 SQL 数据库

java - Springboot 2.0无法访问SQL Server数据库

php - 平均查询的总轮数

sql - 在 DateTime 上加入有时会在 Access 和 SQL Server 之间失败

mysql - 如何将 MS SQL 查询转换为 MySQL 查询

sql - Microsoft SQL Server 2008 - 日期