CASE表达式转换失败



我有一个varchar类型的列,它包含日期和'#':

31.01.2022
31.01.2022
30.11.2021
31.12.2021
30.11.2021
28.02.2022
28.02.2022
#

我正在尝试将日期转换为标准日期格式(YYYY-MM-DD),并保留'#',无论何时出现。

下面是我的代码:
CASE 
WHEN table.CalendarColumn='#' THEN '#'
ELSE CONVERT(date, table.CalendarColumn, 104) END AS Calendar

结果列也为varchar(10)型(与原列相同)。

我希望在单元格为#时得到#,而在单元格不是#时得到转换后的日期,但我得到了这个错误:

从字符转换日期和/或时间时转换失败字符串。

由于数据类型优先,编译器正在尝试将#转换为日期。

因此,您需要将date值转换回您想要的样式的varchar。更短的语法是使用TRY_CONVERTISNULL

SELECT
ISNULL(
CONVERT(varchar(20),
TRY_CONVERT(date, table.CalendarColumn, 104),
23),
table.CalendarColumn) AS Calendar
FROM....

,db&lt的在小提琴

相关内容

  • 没有找到相关文章

最新更新