CASE 表达式中的转换失败
Conversion Failed in a CASE expression
我有一个 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)
类型(与原始栏相同)。
我希望在单元格为 # 时得到 #,在单元格不是 # 时得到转换后的日期,但我却收到此错误:
Conversion failed when converting date and/or time from character
string.
由于数据类型的优先级,编译器正在尝试将 #
转换为日期。
因此您需要将 date
值转换回 varchar
,以您想要的样式代替。更短的语法是使用 TRY_CONVERT
和 ISNULL
SELECT
ISNULL(
CONVERT(varchar(20),
TRY_CONVERT(date, table.CalendarColumn, 104),
23),
table.CalendarColumn) AS Calendar
FROM....
我有一个 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)
类型(与原始栏相同)。
我希望在单元格为 # 时得到 #,在单元格不是 # 时得到转换后的日期,但我却收到此错误:
Conversion failed when converting date and/or time from character string.
由于数据类型的优先级,编译器正在尝试将 #
转换为日期。
因此您需要将 date
值转换回 varchar
,以您想要的样式代替。更短的语法是使用 TRY_CONVERT
和 ISNULL
SELECT
ISNULL(
CONVERT(varchar(20),
TRY_CONVERT(date, table.CalendarColumn, 104),
23),
table.CalendarColumn) AS Calendar
FROM....