2017-10-16 744 views
0

对于多个基本问题的道歉 - 我对SQL很陌生,仍在努力解决问题。在SQL中循环使用CASE WHEN和REPLACE语句

我想从我的登台表中插入记录到我数据库中的另一个表中,都使用'replace'函数删除源文件中的双引号,并将数据从nvarchar(登台表)转换为datetime2。我不能完全解决如何做到这一点:如果我的循环“情况下,当”内“替换”,如跌破的话,SQL不承认我的数据和空出来:

CASE WHEN ISDATE (REPLACE([Column1], '"', '')) = 1 
    THEN CONVERT(datetime2, Column1, 103) 
        ELSE null END 

但是,如果我环路我的我的“情况下,当”内“替换”,如下,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”

,我想将其移动到我的表2为DATETIME2: 16/10/2017

+0

你可以张贴一些样本数据和期望的输出? – Leonidas199x

+0

你能够以不太模糊的格式上传数据,例如'yyyymmdd'吗? – iamdave

回答

2

相反的isdate(),使用try_convert()

TRY_CONVERT(datetime2, LTRIM(REPLACE([Column1], '"', ''), 103) 

我觉得你的困惑是,你需要做的字符串操作之前的转换。为此,字符串操作必须是转换的参数。

+0

感谢您的回复!是的,这是我需要的逻辑,只是不知道如何语法 - 不幸的是,这仍然给我'空'作为值。 – Sam109

+0

对不起 - 我先前的评论道歉 - 这已经奏效!非常感谢你! – Sam109

1

你做得对。问题是,convert需要价值没有" ",因此你的转换失败。

就试试这个:

select 
CASE WHEN ISDATE (REPLACE([Column1], '"', '')) = 1 
    THEN CONVERT(datetime2, (REPLACE([Column1], '"', '')), 103) 
    ELSE null END 
from #tbl 

更多细节:cast and convert doc

+0

谢谢 - 不幸的是我仍然得到以下错误:“转换日期和/或时间从字符串转换失败。” – Sam109

+0

@ Sam109:提供一些样本数据。因为在我的示例数据中,此代码正在工作。 –