我有一个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_CONVERT
和ISNULL
SELECT
ISNULL(
CONVERT(varchar(20),
TRY_CONVERT(date, table.CalendarColumn, 104),
23),
table.CalendarColumn) AS Calendar
FROM....
,db<的在小提琴