我有一列是大量文本的子串。
我想以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_CONVERT
或TRY_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/