为多个基本问题道歉 - 我对SQL非常陌生并仍在尝试解决问题。
我想将登台表中的记录插入数据库中的另一个表,同时使用'replace'函数删除源文件中的双引号,并将数据从nvarchar(登台表)转换为datetime2。我无法解决如何执行此操作:如果我在'replace'中循环'case when',如下所示,那么SQL无法识别我的数据并将其清空:
CASE WHEN ISDATE (REPLACE([Column1], '"', '')) = 1
THEN CONVERT(datetime2, Column1, 103)
ELSE null END
但是,如果我在'case'中循环我的'replace',如下所示,SQL会给我一条错误消息,说它无法将nvarchar转换为datetime2:
LTRIM(REPLACE([Column1], '"', '')
,CASE WHEN ISDATE(Column1) = 1 THEN CONVERT(datetime2, Column1, 103)
ELSE null END
我需要使用什么顺序/语法才能实现此目的?数据字段的一个示例是: “16/10/2017”
它以nvarchar的形式上传到我的登台表 “16/10/2017”
我想把它作为datetime2移到我的table2中: 16/10/2017
答案 0 :(得分:2)
而不是isdate()
,请使用try_convert()
:
TRY_CONVERT(datetime2, LTRIM(REPLACE([Column1], '"', ''), 103)
我认为你的困惑是你需要在转换之前进行字符串操作。为此,字符串操作需要是转换的参数。
答案 1 :(得分:1)
你做得对。问题是,convert
需要没有" "
的值,因此您的转换失败了。
试试这个:
select
CASE WHEN ISDATE (REPLACE([Column1], '"', '')) = 1
THEN CONVERT(datetime2, (REPLACE([Column1], '"', '')), 103)
ELSE null END
from #tbl
更多详情:cast and convert doc